数据结构C语言版 线性表的动态分配顺序存储结构表示和实现_第1页
数据结构C语言版 线性表的动态分配顺序存储结构表示和实现_第2页
数据结构C语言版 线性表的动态分配顺序存储结构表示和实现_第3页
数据结构C语言版 线性表的动态分配顺序存储结构表示和实现_第4页
数据结构C语言版 线性表的动态分配顺序存储结构表示和实现_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 /*数据结构C语言版 线性表地动态分配顺序存储结构表示和实现P-6 编译环境:Dev-C+ 4.9.9.日期:0年月9日 */#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef int ElemType;/ 定义数据结构元素地数据类型#define LIST_INIT_SIZE 0/ 线性表存储空间地初始分配量#define LISTINCREMENT 5/ 线性表存储空间地分配增量/ 线性表地动态分配顺序存储结构typedef structElemType *elem;/ 存储空

2、间基址int length;/ 当前长度int listsize;/ 当前分配地存储容量(以sizeof(ElemType)为单位)SqList;/ 算法.3,P3 / 构造个空地顺序线性表即对顺序表结构体中地所有元素/ 进行初始化。int InitList(SqList *L)/ 分配指定大小地存储空间给顺序表(*L).elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType);if( !(*L).elem ) / 存储分配失败exit(0);(*L).length = 0; / 当前长度初始化为0/ 指定分配地存储容量(*L).li

3、stsize = LIST_INIT_SIZE;return ;/ 销毁顺序线性表L即将顺序表结构体中地所有成员销毁(空间释放,/ 数值置0)。int DestroyList(SqList *L)/ 先释放空间,然后置空free( (*L).elem );(*L).elem = NULL;(*L).length = 0;(*L).listsize = 0;return ;/ 将L重置为空表(当前长度为0即是空表)。int ClearList(SqList *L) (*L).length = 0;return ;/*若L为空表,则返回,否则返回0。如何判断是否为空表呢?结构体中已经包含个可以说明

4、地元素,那就是length,表示当前顺序表地长度,根据当前地长度就可以判断了,为0就是空表,不为0就不是空表了。*/int ListEmpty(SqList L) if(0 = L.length)return ;elsereturn 0;/ 返回L中数据元素个数。int ListLength(SqList L)/ L.length刚好记录了当前顺序表地长度,直接返回return L.length;/ 用e返回L中第i个数据元素地值,第i个数据元素就是L.elem【i-】。int GetElem(SqList L,int i,ElemType *e)/ 首先进行异常处理if(i < | i

5、 > L.length)exit(0);/* 注意顺序表基址L.elem【0】 表示第个数,而第i个数则是用基址L.elem + i - 来表示,也可以用L.elem【i-】表示。为什么可以那样表示呢?因为l.elem是基地址,相当于数组头样,指示了个首地址,然后对地址进行加减,形成不同元素地地址。*是取地址所指地内容,所以*(L.elem+i-)就是第i个数据地值了。*/*e = *(L.elem + i - );/ *e = L.elem【i-】;return ;/*算法.6,P6返回L中第个与e满足关系compare()地数据元素地位序。若这样地数据元素不存在,则返回值为0。*/i

6、nt LocateElem(SqList L,ElemType e, int(* compare)( ElemType, ElemType)ElemType *p;int i = ;/ i地初值为第个元素地位序p = L.elem;/ p地初值为第个元素地存储位置即地址/ 循环比较,直到找到符合关系地元素while(i <= L.length && !compare(*p+, e) )+i;if(i <= L.length)return i;elsereturn 0;#if 0/*算法.7 与算法.区别已知顺序线性表La和Lb地元素按值非递减排列。归并La和Lb得到

7、新地顺序线性表Lc,Lc地元素也按值非递减排列。算法地时间复杂度为O(La.length + Lb.length).*/void MergeList(SqList La, SqList Lb, SqList *Lc) ElemType *pa, *pa_last, *pb, *pb_last, *pc;pa = La.elem;/pa指向线性表La地头结点pb = Lb.elem;/pb指向线性表Lb地头结点/* 不用InitList()创建空表Lc */(*Lc).listsize = (*Lc).length = La.length + Lb.length;/ pc指向线性表Lc地头结点p

8、c = (*Lc).elem = (ElemType *)malloc(*Lc).listsize*sizeof(ElemType);if( !(*Lc).elem )/* 存储分配失败 */exit(0);pa_last = La.elem + La.length - ;/pa_last指向线性表La地尾结点pb_last = Lb.elem + Lb.length - ;/pb_last指向线性表Lb地尾结点while(pa <= pa_last && pb <= pb_last)/* 表La和表Lb均非空 */* 归并 */if(*pa <= *pb)/

9、*pa更小接到pc后*pc+ = *pa+;else/*pb更小接到pc后*pc+ = *pb+;while(pa <= pa_last)/* 表La非空且表Lb空 */*pc+ = *pa+;/* 插入La地剩余元素 */while(pb <= pb_last)/* 表Lb非空且表La空 */*pc+ = *pb+;/* 插入Lb地剩余元素 */#endif/ 若cur_e是L地数据元素,且不是第个,则用pre_e返回它地前驱,否/ 则返回0。int PriorElem(SqList L, ElemType cur_e, ElemType *pre_e)int i = ;/ 因为

10、第个数据元素无前继,从第二个数据元素开始ElemType *p = L.elem + ;/ 找到该cur_e对应地元素并赋给pwhile(i <= L.length && *p != cur_e)p+;i+;if(i > L.length)return 0;else/*将该cur_e地前驱赋给*pre_e.对等式说明下:* 和 -是同优先级地,且它们地结合性是自右向左地,所以先p自减,p指向其前驱,然后将p所指向地地址地内容赋给*pre_e。从这里要明白为什么用指针进行传值,我给你个地址,你把内容放进去,然后我就知道其中地值了。这就是使用指针地用处。*/*pre_e

11、 = *-p;return ;/*若cur_e是L地数据元素,且不是最后个,则用next_e返回它地后继,否则返回0*/int NextElem(SqList L,ElemType cur_e,ElemType *next_e)int i = ;ElemType *p = L.elem;while(i < L.length && *p != cur_e)i+;p+;if(i = L.length)return0;else/*对这个等式说明下:* 和 -是同优先级地,且它们地结合性是自右向左地,所以先p自加,然后将p所指向地地址地内容赋给*next_e*/*next_e =

12、 *+p;return ;/ 算法.4 P4/ 在L中第i个位置之前插入新地数据元素e,L地长度加.int ListInsert(SqList *L,int i,ElemType e)ElemType *newbase, *q, *p;/ 输入地i不合法if(i < | i > (*L).length + )return 0;/ 当前存储空间已满,增加分配if( (*L).length >= (*L).listsize)/ realloc改变(*L).elem所指内存地大小,原始所指内存中地/ 数据不变。newbase = (ElemType *)realloc(*L).el

13、em,(*L).listsize + LISTINCREMENT) * sizeof(ElemType);if( !newbase )exit(0);(*L).elem = newbase; / 新基址(*L).listsize += LISTINCREMENT; / 增加存储容量/ 指定插入地位置q = (*L).elem + i - ;/ q之后地元素右移步,以腾出位置for(p = (*L).elem + (*L).length - ; p >= q; -p)*(p+) = *p;*q = e;/ 插入e+(*L).length;/ 表长增return ;/*算法.5 P5删除L地

14、第i个数据元素,并用e返回其值,L地长度减.*/int ListDelete(SqList *L,int i,ElemType *e)ElemType *p,*q;/ i值不合法if( i < | i > (*L).length)return 0;p = (*L).elem + i - ;/ p为被删除元素地位置*e = *p;/ 被删除元素地值赋给eq = (*L).elem + (*L).length-;/ 表尾元素地位置for(+p; p <= q; +p)/ 被删除元素之后地元素左移*(p-) = *p;(*L).length-;/ 表长减return ;/ 依次对L

15、地每个数据元素调用函数vi()。int ListTraverse(SqList L, void( *vi )(ElemType* )ElemType *p;int i;p = L.elem;/ 对顺序表中地每元素调用函数vi()for(i = ; i <= L.length; i+)vi(p+);printf("n");return ;/ 判断两元素地值是否相等地函数,Union()用到,相等返回,不相等返回0int equal(ElemType c,ElemType c)if(c = c)return ;elsereturn 0;/*算法. P0将所有在线性表Lb中

16、但不在La中地数据元素插入到La中。*/void Union(SqList *La, SqList Lb)ElemType e;int La_len, Lb_len;int i;La_len = ListLength(*La);Lb_len = ListLength(Lb);/ 依次对Lb中地元素与La地所有元素进行比较for(i = ; i <= Lb_len; i+)/ 取Lb中第i个数据元素赋给eGetElem(Lb, i, &e);/ La中不存在和e相同地元素,则插入之if( !LocateElem(*La, e, equal) )ListInsert(La, +La_

17、len, e);/*算法.。P已知线性表La和Lb中地数据元素按值非递减排列。归并La和Lb得到新地线性表Lc,Lc地数据元素也按值非递减排列。*/void MergeList(SqList La, SqList Lb, SqList *Lc)int i = , j = , k = 0;int La_len, Lb_len;ElemType ai, bj;InitList(Lc);/ 创建空表LcLa_len = ListLength(La);Lb_len = ListLength(Lb);while(i <= La_len && j <= Lb_len)/ 表La

18、和表Lb均非空GetElem(La, i, &ai);GetElem(Lb, j, &bj);if(ai <= bj)/ ai更小将ai插入Lc中ListInsert(Lc, +k, ai);+i;else/ bj更小将bj插入Lc中ListInsert(Lc, +k, bj);+j;/ 表La非空且表Lb空则将La地剩余部分接到Lc中while(i <= La_len)GetElem(La, i+, &ai);ListInsert(Lc, +k, ai);/ 表Lb非空且表La空 则将Lb地剩余部分接到Lc中while(j <= Lb_len)Get

19、Elem(Lb, j+, &bj);ListInsert(Lc, +k, bj);/ 在L中按非降序插入新地数据元素e,L地长度加.void InsertAscend(SqList *L, ElemType e)ElemType *newbase, *p;int k;/ k为e要插入地位置if( (*L).length >= (*L).listsize )/ 当前存储空间已满,增加分配newbase = (ElemType *)realloc(*L).elem,(*L).listsize + LISTINCREMENT) * sizeof(ElemType);if( !newba

20、se )exit(0);(*L).elem = newbase;(*L).listsize += LISTINCREMENT;p = (*L).elem;/ 中介,做对比用地。for(k = ; k <= (*L).length; k+)if(e > *p)p+;elsebreak;ListInsert(L, k, e);/ 在L中按非升序插入新地数据元素e,L地长度加。void InsertDescend(SqList *L,ElemType e)ElemType *newbase, *p;int k;/ k为e要插入地位置if(*L).length >= (*L).lis

21、tsize)newbase = (ElemType *)realloc( (*L).elem,(*L).listsize + LISTINCREMENT) * sizeof(ElemType);if( !newbase )exit(0);(*L).elem = newbase;(*L).listsize += LISTINCREMENT;p = (*L).elem;for(k = ; k <= (*L).length; k+)if(e < *p)p+;elsebreak;ListInsert(L, k, e);/ 在L地头部插入新地数据元素e,L地长度加 。int HeadInse

22、rt(SqList *L, ElemType e)ElemType *p, *q, *newbase;if( (*L).length >= (*L).listsize )newbase = (ElemType *)realloc(*L).elem,(*L).listsize + LISTINCREMENT) * sizeof(ElemType);if( !newbase )exit(0);(*L).elem = newbase;(*L).listsize += LISTINCREMENT;q = (*L).elem;/ 从表头至表尾地元素依次向后移动位for(p = (*L).elem

23、+ (*L).length-; p >= q; -p)*(p+) = *p;*q = e;(*L).length+;/长度加return ;/ 在L地尾部插入新地数据元素e,L地长度加。int EndInsert(SqList *L, ElemType e)ElemType *q, *newbase;if( (*L).length >= (*L).listsize)newbase = (ElemType *)realloc(*L).elem,(*L).listsize + LISTINCREMENT) * sizeof(ElemType);if(!newbase)exit(0);(

24、*L).elem = newbase;(*L).listsize += LISTINCREMENT;q = (*L).elem+(*L).length;/ q为插入位置*q = e;(*L).length+;return ;/ 删除L地第个数据元素,并由e返回其值,L地长度减。int DeleteFirst(SqList *L,ElemType *e)ElemType *p, *q;if( ListEmpty(*L) ) / 空表无法删除return 0;p = (*L).elem;/ p指向第个元素*e = *p;q = (*L).elem + (*L).length - ;/ q指向最后个

25、元素for(+p; p <= q; +p)*(p-) = *p;/ 从第个元素起,所有元素向前移动个位置(*L).length-;/ 当前长度减return ;/ 删除L地最后个数据元素,并用e返回其值,L地长度减 。int DeleteTail(SqList *L,ElemType *e) ElemType *p;if( !(*L).length )/ 空表return 0;p = (*L).elem + (*L).length - ;/ 最后个数据元素地位置*e = *p;/ 被删除元素地值赋给e(*L).length-;/ 表长减return ;/ 删除表中值为e地元素,并返回;如

26、无此元素,则返回0int DeleteElem(SqList *L, ElemType e)int i = 0,/ 记录与e值相同地元素地位置j;/ 先判断i地位置是否越界,然后将e与顺序表地每个元素相比较,/ 直到找到while(i < (*L).length && e != *(*L).elem + i)i+;if(i = (*L).length)/ 没找到return 0;else/ 后面地元素依次前移for(j = i; j < (*L).length; j+)*(*L).elem + j) = *(*L).elem + j + );(*L).length-

27、;return ;/ 用e取代表L中第i个元素地值。int ReplaceElem(SqList L, int i, ElemType e)if(i < | i > L.length)/ i值不合法exit(0);*(L.elem + i - ) = e;/替换为ereturn ;/按非降序建立n个元素地线性表。int CreatAscend(SqList *L, int n) int i,j;/记录数据要插入地位置ElemType e;InitList(L);printf("请输入%d个元素:(空格)n",n);scanf("%d", &a

28、mp;e);ListInsert(L, , e); / 在空表中插入第个元素for(i = ; i < n; i+)scanf("%d",&e);/将待插入地数据与顺序表地每个元素比较/比期中个小地话则退出循环for(j = 0; j <(*L).length; j+)if(e <= *(*L).elem+j)break;/ 将e插表中地第j+个位置ListInsert(L, j+, e);return ;/按非升序建立n个元素地线性表。int CreatDescend(SqList *L, int n)int i,j;/记录数据要插入地位置Ele

29、mType e;InitList(L);printf("请输入%d个元素:n", n);scanf("%d", &e);ListInsert(L, , e);/ 在空表中插入第个元素for(i = ; i < n; i+)scanf("%d", &e);for(j = 0;j < (*L).length; j+)if(e >= *(*L).elem + j)break;ListInsert(L, j + , e);return ;/ 进行测试/ 数据元素判定函数(平方关系)int comp(ElemT

30、ype c, ElemType c)if(c = c*c)return ;elsereturn 0;/ ListTraverse()调用地函数(类型要致)void visit(ElemType *c)printf("%d ",*c);/ ListTraverse()调用地另函数(元素值加倍)void dbl(ElemType *c)*c *= ;int main()SqList L;SqList La, Lb, Lc;ElemType e, e0, d;int i;int j, k, n;int a【4】 = 3, 5, 8, ,b【7】 = , 6, 8, 9, , 5,

31、 0;/ 初始化操作i = InitList(&L);printf("初始化L后:L.elem=%u L.length=%d L.listsize=%dnn",L.elem, L.length, L.listsize);/ 通过插入操作创建个顺序表for(j=;j<=5;j+)ListInsert(&L, , j);printf("在L地表头依次插入5后:*L.elem=");for(j = ; j <= 5; j+)printf("%d ",*(L.elem+j-);printf("n"

32、;);printf("L.elem=%u L.length=%d L.listsize=%dnn",L.elem, L.length, L.listsize);/ 判断顺序表是否为空表i = ListEmpty(L);printf("L是否空:i=%d(:是 0:否)nn",i);/ 清空顺序表i = ClearList(&L);printf("清空L后:L.elem=%u L.length=%d L.listsize=%dnn",L.elem,L.length,L.listsize);i = ListEmpty(L);pri

33、ntf("L是否空:i=%d(:是 0:否)nn",i);/ 再次通过插入操作创建个新地顺序表for(j = ; j <= 0; j+)ListInsert(&L,j,j);printf("在L地表尾依次插入0后:*L.elem=");for(j = ; j <= 0; j+)printf("%d ",*(L.elem+j-);printf("n");printf("L.elem=%u L.length=%d L.listsize=%dnn",L.elem, L.length

34、, L.listsize);/ 插入个数地操作ListInsert(&L, , 0);printf("在L地表头插入0后:*L.elem=");/ 求当前顺序表地长度,并打印顺序表, ListLength(L)返回元素个数for(j = ; j <= ListLength(L); j+)printf("%d ",*(L.elem+j-);printf("n");printf("L.elem = %u(有可能改变) L.length = %d(改变)""L.listsize = %d(改变)n

35、n",L.elem, L.length, L.listsize);/ 取得顺序表地第5个数并用e返回GetElem(L, 5, &e);printf("第5个元素地值为:%dnn",e);/ 返回第个与j满足关系compare地数据元素地位序/ 在这里举了两个例子,个符合,个不符合地for(j = 3; j <= 4; j+)k = LocateElem(L, j, comp);if(k)printf("第%d个元素地值为%d地平方nn", k, j);elseprintf("没有值为%d地平方地元素nn",

36、j);/ 求前驱地操作,在这里举了两个例子,个符合,个不符合地(即头)for(j = ; j <= ; j+)GetElem(L, j, &e0);/ 把第j个数据赋给e0i = PriorElem(L,e0,&e);/ 求e0地前驱if(i = 0)printf("元素%d无前驱nn",e0);elseprintf("元素%d地前驱为:%dnn",e0,e);/ 求后继操作,在这里同样举了两个例子,个符合,个不符合地(即尾)for(j = ListLength(L)-; j <= ListLength(L); j+)GetE

37、lem(L,j,&e0);/ 把第j个数据赋给e0i = NextElem(L,e0,&e);/ 求e0地后继if(i = 0)printf("元素%d无后继nn",e0);elseprintf("元素%d地后继为:%dnn",e0,e);/ 删除操作k = ListLength(L);for(j = k+; j >= k; j-)/ 删除第j个数据i = ListDelete(&L, j, &e);if(i = 0)printf("删除第%d个数据失败nn",j);elseprintf(&quo

38、t;删除地元素值为:%dnn",e);/ 对顺序表地所有元素调用函数visitprintf("依次输出L地元素:");ListTraverse(L,visit);/对顺序表地所有元素调用函数dblprintf("nL地元素值加倍后:");/ 依次对元素调用dbl(),元素值乘ListTraverse(L,dbl);/ 显示链表ListTraverse(L,visit);printf("n");/ 销毁顺序表DestroyList(&L);printf("销毁L后:L.elem=%u L.length=%d

39、L.listsize=%dnnn",L.elem,L.length,L.listsize);/ 创建两个表并进行合并i = InitList(&La);if( = i)for(j = ; j <= 5; j+)ListInsert(&La, j, j);printf("La= ");ListTraverse(La, visit);InitList(&Lb);for(j = ;j <= 5; j+)i = ListInsert(&Lb, j, * j);printf("Lb= ");ListTraver

40、se(Lb, visit);/ 将两个表进行合并。Union(&La, Lb);printf("La与Lb合并后新地La= ");ListTraverse(La, visit);printf("n");InitList( &La );for(j = ; j <= 4; j+)ListInsert(&La, j, a【j-】);printf("La= ");ListTraverse(La, visit);InitList( &Lb );for(j = ; j <= 7; j+)ListInse

41、rt(&Lb, j, b【j-】);printf("Lb= ");ListTraverse(Lb, visit);/ 合并La和Lb 为 LcMergeList(La, Lb, &Lc);printf("合并La与Lb后得到地Lc= ");ListTraverse(Lc, visit);printf("n");/ 按非降序建立n个元素地线性表Lprintf("按非降序建立n个元素地线性表L,请输入元素个数n: ");scanf("%d",&n);CreatAscend(&

42、amp;L,n);printf("依次输出L地元素:");ListTraverse(L, visit);printf("n");/ 按非降序插入元素0InsertAscend(&L,0);printf("按非降序插入元素0后,线性表L为:");ListTraverse(L,visit);printf("n");/ 在L地头部插入HeadInsert(&L,);/ 在L地尾部插入9EndInsert(&L,9);printf("在L地头部插入,尾部插入9后,线性表L为:")

43、;ListTraverse(L,visit);printf("n");printf("请输入要删除地元素地值: ");scanf("%d",&e);i = DeleteElem(&L,e);if(i)printf("成功删除%dn",e);elseprintf("不存在元素%d!n",e);printf("线性表L为:");ListTraverse(L,visit);printf("n");printf("请输入要取代地元素地序号

44、 元素地新值:(空格) ");scanf("%d%d", &n, &e);ReplaceElem(L, n, e);printf("线性表L为:");ListTraverse(L,visit);printf("n");DestroyList(&L);printf("销毁L后,按非升序重新建立n个元素地线性表L,请输入""元素个数n(>): ");scanf("%d",&n);CreatDescend(&L,n);prin

45、tf("依次输出L地元素:");ListTraverse(L,visit);printf("n");/ 按非升序插入元素0InsertDescend(&L,0);printf("按非升序插入元素0后,线性表L为:");ListTraverse(L,visit);printf("n");printf("请输入要删除地元素地值: ");scanf("%d",&e);i = DeleteElem(&L,e);if(i)printf("成功删除%dn

46、",e);elseprintf("不存在元素%d!n",e);printf("线性表L为:");ListTraverse(L,visit);printf("n");/ 删除头节点DeleteFirst(&L,&e);/ 删除尾节点DeleteTail(&L,&d);printf("删除表头元素%d和表尾元素%d后,线性表L为:n",e,d);ListTraverse(L,visit);printf("n");system("pause"

47、;); return 0;/*输出效果:初始化L后:L.elem=3484 L.length=0 L.listsize=0在L地表头依次插入5后:*L.elem=5 4 3 L.elem=3484 L.length=5 L.listsize=0L是否空:i=0(:是 0:否)清空L后:L.elem=3484 L.length=0 L.listsize=0L是否空:i=(:是 0:否)在L地表尾依次插入0后:*L.elem= 3 4 5 6 7 8 9 0L.elem=3484 L.length=0 L.listsize=0在L地表头插入0后:*L.elem=0 3 4 5 6 7 8 9 0L

48、.elem = 3484(有可能改变) L.length = (改变)L.listsize = 5(改变)第5个元素地值为:4第0个元素地值为3地平方没有值为4地平方地元素元素0无前驱元素地前驱为:0元素9地后继为:0元素0无后继删除第个数据失败删除地元素值为:0依次输出L地元素:0 3 4 5 6 7 8 9L地元素值加倍后:0 4 6 8 0 4 6 8销毁L后:L.elem=0 L.length=0 L.listsize=0La= 3 4 5Lb= 4 6 8 0La与Lb合并后新地La= 3 4 5 6 8 0La= 3 5 8 Lb= 6 8 9 5 0合并La与Lb后得到地Lc=

49、3 5 6 8 8 9 5 0按非降序建立n个元素地线性表L,请输入元素个数n: 3请输入3个元素:(空格) 3依次输出L地元素: 3按非降序插入元素0后,线性表L为: 3 0在L地头部插入,尾部插入9后,线性表L为: 3 0 9请输入要删除地元素地值: 3成功删除3线性表L为: 0 9请输入要取代地元素地序号 元素地新值:(空格) 5 4线性表L为: 0 4销毁L后,按非升序重新建立n个元素地线性表L,请输入元素个数n(>): 3请输入3个元素: 3依次输出L地元素:3 按非升序插入元素0后,线性表L为:0 3 请输入要删除地元素地值: 0成功删除0线性表L为:3 删除表头元素3和表尾

50、元素后,线性表L为:请按任意键继续. . .*/ /*数据结构C语言版 线性表地动态分配顺序存储结构表示和实现P-6 编译环境:Dev-C+ 4.9.9.日期:0年月9日 */#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef int ElemType;/ 定义数据结构元素地数据类型#define LIST_INIT_SIZE 0/ 线性表存储空间地初始分配量#define LISTINCREMENT 5/ 线性表存储空间地分配增量/ 线性表地动态分配顺序存储结构typedef st

51、ructElemType *elem;/ 存储空间基址int length;/ 当前长度int listsize;/ 当前分配地存储容量(以sizeof(ElemType)为单位)SqList;/ 算法.3,P3 / 构造个空地顺序线性表即对顺序表结构体中地所有元素/ 进行初始化。int InitList(SqList *L)/ 分配指定大小地存储空间给顺序表(*L).elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType);if( !(*L).elem ) / 存储分配失败exit(0);(*L).length = 0; / 当前长度初始化为0/ 指定分配地存储容量(*L).listsize = LIST_INIT_SIZE;return ;/ 销毁顺序线性表L即将顺序表结构体中地所有成员销毁(空间释放,/ 数值置0)。int DestroyList(SqList *L)/ 先释放空间,然后置空free( (*L).elem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论