您的位置:首页 > 理论基础 > 数据结构算法

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

2017-12-20 15:05 127 查看

顺序表

内存单元连续

以表名唯一标识

数据有先后关系

顺序表定义

静态定义

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


动态生成

#define MaxSize 100
typedef 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息