C 数据结构 笔记(一) —— 顺序表

来源:互联网 发布:程序员的日常工作内容 编辑:程序博客网 时间:2024/05/19 13:07

顺序表

  • 内存单元连续
  • 以表名唯一标识
  • 数据有先后关系

顺序表定义

静态定义

#define MaxSize 100ElemType Sqlist[MaxSize];int len;

动态生成

#define MaxSize 100typedef struct {    ElemType *elem;    int length;    int listsize;} Sqlist;void createSqlist(Sqlist *L){    L->elem = (ElemType *)malloc(MaxSize*sizeof(ElemType));    if (!L->elem) exit(0);    L->length = 0;    L->listsize = MaxSize;}

插入元素

静态表插入

void insertElem(ElemType Sqlist[], int n, int i, ElemType item){    int t;    if (n == MaxSize || i < 1 || i > n + 1) exit(0);    for (t = n - 1; t >= i-1; t--)    {        Sqlist[t+1] = Sqlist[t];    }    Sqlist[i-1] = item;    n += 1;}

动态表插入

void insertElem(Sqlist *L, int i, ElemType item){    ElemType *base;    ElemType *insPtr;    ElemType *p;    if (i < 1 || i > L->length+1) exit(0);    if (L->length >= L->listsize)    {        base = (ElemType *)realloc(L->elem, (L->listsize+100)*sizeof(ElemType));        L->elem = base;        L->listsize = L->listsize + 100;    }    insPtr = &(L->elem[i-1]);    for (p = &(L->elem[L->length-1]); p >= insPtr; p--)    {        *(p+1) = *p;    }    *insPtr = item;    L->length += 1}

删除元素

静态表删除

void deleteElem(ElemType Sqlist[], int n, int i){    int j;    if (i < 1 || i > n) exit(0);    for (j = i; j < n; j++)    {        Sqlist[j-1] = Sqlist[j];    }    n -= 1;}

冻态表删除

void deleteElem(Sqlist *L, int i){    ElemType *delPre;    ElemType *p;    if (i < 1 || i > L->length) exit(0);    delPre = &(L->elem[i-1]);    q = L->elem + L->length-1;    for (++delPre; delPre <= q; ++delPre)    {        *(delPre-1) = *delPre;    }    L->length -= 1;}