数据结构C语言版 静态链表实现集合运算.docVIP

数据结构C语言版 静态链表实现集合运算.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
#include stdio.h /* 数据结构C语言版 静态链表实现集合运算 P33-34 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月10日 */ typedef char ElemType; #define MAXSIZE 100 // 链表的最大长度 // 线性表的静态单链表存储结构 typedef struct { ElemType data; //存储数据,数据域 int cur; //游标指示器cur,代替指针指示结点在数组中的位置 }component,SLinkList[MAXSIZE]; // 算法2.14 P33 // 将一维数组L中各分量链成一个备用链表,L[0].cur为头指针, // L[0]无数据域。“0”表示空指针 void InitSpace(SLinkList L) { int i; for(i=0;iMAXSIZE-1;i++) L[i].cur=i+1; L[MAXSIZE-1].cur=0; } // 算法2.15 P33 // 若备用链表非空,则返回分配的结点下标(备用链表的第一个结点),否则返回0 int Malloc(SLinkList space) { int i=space[0].cur; if(i) // 备用链表非空 // 备用链表的头结点指向原备用链表的第二个结点,因为第一个结点 // 已经被使用了,不加入备用链表中 space[0].cur=space[i].cur; return i; // 返回新开辟结点的坐标 } // 构造一个空链表,返回值为空表在数组中的位序 int InitList(SLinkList L) { int i; i=Malloc(L); // 调用Malloc(),简化程序 L[i].cur=0; // 空链表的表头指针为空(0),头指针无数据域 return i; } // 将此表重置为空表,即将这个链表转化为备用表的一部分 int ClearList(SLinkList L,int n) { int j,k, i=L[n].cur; // 链表第一个结点的位置 L[n].cur=0; // 将链表置空 k=L[0].cur; // 备用链表第一个结点的位置 L[0].cur=i; // 把链表的结点连到备用链表的表头 while(i) // 没到链表尾 { j=i; i=L[i].cur; // 指向下一个元素 } L[j].cur=k; // 把原备用链表的第一个结点接到原链表的尾部, // 最终构成的备用链表为以原来链表的头结点为第一个结点的备用 // 链表(即原链表+原备用链表) return 1; } // 判断L中表头位序为n的链表是否空,若是空则是空表返回1;否则返回0 int ListEmpty(SLinkList L,int n) { if(L[n].cur==0) // 空表 return 1; else return 0; } // 返回L中表头位序为n的链表的数据元素个数 int ListLength(SLinkList L,int n) { int j=0, i=L[n].cur; // i指向第一个元素 while(i) // 没到静态链表尾 { i=L[i].cur; // 指向下一个元素 j++; } return j; } // 用e返回L中表头位序为n的链表的第i个元素的值 int GetElem(SLinkList L,int n, int i,ElemType *e) { int l, k=n; // k指向表头序号 if(i1||iListLength(L,n)) // i值不合理 return 0; for(l=1;l=i;l++) // 移动i-1个元素 k=L[k].cur; *e=L[k].data; //此时k指向第i个元素的位置 return 1; } // 在L中表头位序为n的静态单链表中查找第1个值为e的元素。 // 若找到,则返回它在L中的位序,否则返回0 int LocateElem(SLinkList L,int n,ElemType e) { int i = L[n].cur; // i指示表中第一个结点 while(iL[i].data!=e) // 在表中顺链查找(e不能是字符串) i=L[i].cur; return i; } // 若cur_e是此单链表的数据元素,且不是第一个 int PriorElem(SLinkList L,in

文档评论(0)

yan666888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档