《大话数据结构》读书笔记系列(三)---- 线性表

1、线性表:零个或多个数据元素的有限序列。

2、线性表的顺序存储结构:用一段连续的存储单元依次存放线性表的数据元素。这种结构在获取节点的值的时候非常简单,但是在插入数据元素或者删除数据元素时,前面和后面的元素都得做相应的移动,非常浪费时间。这种结构比较审核元素个数固定,不会轻易进行数据增加或者删除的情况。

下面是针对这种结构的插入删除方法:

#filename:list.h
#define MAXSIZE 30

typedef int ElemType;

typedef struct{
    ElemType data[MAXSIZE];
    int length;
}SqList,* pSqList;


#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;

Status InsertElem(pSqList L,int i,ElemType e);

Status DeleteElem(pSqList L,int i,ElemType & e);

void PrintList(pSqList L);
#filename:list.cpp
Status InsertElem(pSqList L,int i,ElemType e){
    if(L->length == MAXSIZE){
	   return ERROR;
    }
    if(i < 1 || i > L->length+1){
	   return ERROR;
    }
    if(i <= L->length){
    	for(int k = L->length -1; k >= i-1; k--){
    	    L->data[k+1] = L->data[k];
	   }
    }
    L->data[i-1] = e;
    L->length ++;
    return OK;
}

void PrintList(pSqList L){
    for(int i = 0; i < L->length; ++i){
        cout << L->data[i] << endl;
    }
}

Status DeleteElem(pSqList L,int i,ElemType & e){
    if(L->length == 0){
        return ERROR;
    }
    if(i < 1 || i > L->length){
        return ERROR;
    }
    e = L->data[i-1];
    if(i < L->length){
        for(int j = i-1; j < L->length; ++j){
            L->data[j] = L->data[j+1];
        }
    }
    L->length--;
    return OK;
}
#filename:main.cpp
#include <iostream>
using namespace std;
#include "list.h"
#include "list.cpp"

int main(){
    pSqList list = new SqList;
    int e;
    list->length = 0;
    cout << InsertElem(list,1,11) << endl;
    cout << InsertElem(list,2,12) << endl;
    cout << InsertElem(list,1,13) << endl;
    cout << DeleteElem(list,2,e) << endl;
    PrintList(list);
    return 0;
}

3、线性表的链式存储结构:


你可能感兴趣的:(数据结构,线性表)