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

数据结构之顺序表的静态表示和动态表示

2015-04-07 15:36 363 查看
顺序表的静态表示,代码如下:

#include <stdio.h>

#define MAXSIZE			100

void insertElem(int *Sqlist, int *len, int i, int x);
void deleteElem(int *Sqlist, int *len, int i);

int main()
{
int Sqlist[MAXSIZE];
int i;
int len;
for(i = 0; i < 6; ++i)
scanf("%d",&Sqlist[i]);
len = 6;
for(i = 0; i < len; ++i)
printf("%d ",Sqlist[i]);
printf("The spare space is %d\n",MAXSIZE - len);
insertElem(Sqlist, &len,  3, 0);
for(i = 0; i < len; ++i)
printf("%d ",Sqlist[i]);
printf("The spare space is %d\n",MAXSIZE - len);
deleteElem(Sqlist,&len,11);
for(i = 0; i < len; ++i)
printf("%d ",Sqlist[i]);
printf("The spare space is %d\n",MAXSIZE - len);
return 0;
}

void insertElem(int *Sqlist, int *len, int i, int x)
{
int t;
if(i < 1 || i > *len + 1 || *len == MAXSIZE)
{
printf("This insert is illegal.\n");
return ;
}
for(t = *len - 1; t >= i - 1; --t)
Sqlist[t + 1] = Sqlist[t];
Sqlist[i - 1] = x;
*len = *len + 1;
}

void deleteElem(int *Sqlist, int *len, int i)
{
int j;
if(i < 1 || i > *len)
{
printf("This delete is illegal.\n");
return ;
}
for(j = i; j <= *len - 1; j++)
Sqlist[j - 1] = Sqlist[j];
*len = *len - 1;
}
顺序表的动态表示,代码如下:

#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE		10
#define LISTINCREMENT		10

typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
void initSqlist(Sqlist &L);
void insertElem(Sqlist &L, int i, int x);
void deleteElem(Sqlist &L, int i);

int main()
{
Sqlist L;
int i;
initSqlist(L);
for(i = 0; i < 15; i++)
insertElem(L, i + 1, i + 1);
printf("\nThe content of list is\n");
for(i = 0; i < L.length; i++)
printf("%d ",L.elem[i]);
deleteElem(L,5);
printf("\nDelete the fifth element\n");
for(i = 0; i < L.length; i++)
printf("%d ",L.elem[i]);
return 0;
}

void initSqlist(Sqlist &L)
{
L.elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));
if(!L.elem)
exit(0);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
}

void insertElem(Sqlist &L, int i, int x)
{
int *base,*p,*q;
if(i < 1 || i > L.length + 1)
exit(0);
if(L.length >= L.listsize)
{
base = (int*)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(int));
if(!base)
exit(0);
L.elem = base;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i - 1]);
for(p = &L.elem[L.length - 1]; p >= q; --p)
*(p + 1) = *p;
*q = x;
L.length++;
}

void deleteElem(Sqlist &L, int i)
{
int *p;
if(i < 1 || i > L.length)
exit(0);
for(p = &L.elem[i]; p <= &(L.elem[L.length - 1]); p++)
*(p - 1) = *p;
L.length--;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息