本文共 1298 字,大约阅读时间需要 4 分钟。
线性表的实现分顺序存储结构和链式存储结构。
顺序表属于线性表的一种,是用一组地址连续的存储单元依次来实现对元素的存储。
但是,顺序结构最大的缺点就是在进行插入和删除操作的时候,如果插入位置不理想,那么需要移动大量的元素。可以发现在顺序存储结构中,他们相邻的元素的存储位置也是相邻的,在申请内存的的时候,是一次性申请一块连续的内存,中间是没有空隙的,这样也就没办法进行快速的插入,如果进行删除操作,就需要进行位置的填充。
顺序结构最大的好处就是可以快速的存取表中的任一位置的元素。
#include#include #define OK 1#define ERROR 0#define OVERFLOW -2#define LISTINCREMENT 10typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型#define LIST_INIT_SIZE 100 //顺序表可能达到的最大长度typedef struct { ElemType *elem; int length; int listsize;}SqList;//初始化Status InitList(SqList &L){ L.elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof(ElemType)); if(! L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;}//插入Status insertElement(SqList &L , int i , ElemType e){ if(1>i || i>L.length+1) return ERROR; if(L.length>= L.listsize){ ElemType *newbase = (ElemType *)realloc(L.elem , (L.listsize + LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L.elem = newbase; L.listsize += LISTINCREMENT; } ElemType *p = &(L.elem[i-1]); ElemType *q = &(L.elem[L.length-1]); for( ; q>=p ; q--){ *(q+1) = *q ; } *p = e; L.length += 1; return OK;}//在顺序表L中删除第i个元素,并用e返回其值Status deleteElement(SqList &L , int i , ElemType &e){ if(1>i || L.length i || L.length
转载地址:http://twegf.baihongyu.com/