- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数组模拟链表
数组模拟链表首先,什么是数组模拟链表.摘自维基百科(/wiki/%E9%93%BE%E8%A1%A8):一个链表或者多个链表使用独立的存储空间,一般用数组或者类似结构实现,优点是可以自动获得一个附加数据:唯一的编号,并且方便调试;缺点是不能动态的分配内存。当然,另外的在上面加一层块状链表用来分配内存也是可以的,这样就解决了这个问题。这种方法有时候被叫做数组模拟链表,但是事实上只是用表示在数组中的位置的下标索引代替了指向内存地址的指针,这种下标索引其实也是逻辑上的指针,整个结构还是链表,并不算是被模拟的(但是可以说成是用数组实现的链表)。
用图形象的说明一下:见图
开始指向arr[0],输出arr[0].data.又因arr[0].num为1,则指向arr[1],输出arr[1].data……这样输出arr[8].data之后则指向arr[9],而arr[9].data为先前指定的结束值0,则输出结束。链表好处在于不用事先指定数据量。虽然数组不行,但要指定的长度也只是初始长度,可以轻松向其中插入数据。我在以下c程序里,数组最后多设定一个空闲的元素,纯属偷懒,也可以新建立一个结构数据。
下面用实际程序说明一下,以下程序均原创,TURBO C 2.0上通过:
(一)/*简单的程序,利用数组模拟链表输出a-h*/#includestdio.hvoid main(){struct{int data;int num;}arr[10]={{a,1},{b,2},{c,3},{d,4},{e,5},{f,6},{g,7},{h,8},{0,0},{0,0}};int pos;
pos=0;while(arr[pos].data!=0){printf(%c,,arr[pos].data);pos=arr[pos].num;}printf(\n);}
输出:a,b,c,d,e,f,g,h,
(二)/*在上面程序基础上改进,现要在编号为K,K+1的两个结构体数据之间插入数据x,x存在空闲的arr[9]里,K=3时即在de之间插入x*/
#includestdio.h#define K 3
void main(){struct{int data;int num;}arr[10]={{a,1},{b,2},{c,3},{d,4},{e,5},{f,6},{g,7},{h,8},{0,0},{0,0}};int pos=0;
arr[K].num=9;arr[9].data=x;arr[9].num=(K+1);
while(arr[pos].data!=0){printf(%c,,arr[pos].data);pos=arr[pos].num;}printf(\n);}
输出:a,b,c,d,x,e,f,g,h,
(三)/*有26个人组成一个环,1,2,3循环报数,数到3的出列arr[0]到arr[25]是26个人,arr[26]是空数据,arr[27]是要插入的人这次先不插入人*/
#includestdio.h#define STEP 3
void main(){/*定义*/struct{int data;int num;}arr[28];int i;int pos;int count;
/*赋值*/for(i=0;i=25;i++){arr[i].data=97+i;arr[i].num=i+1;}arr[26].data=0;
/*输出每个人*/pos=0;while(arr[pos].data!=0){printf(%c,,arr[pos].data);pos=arr[pos].num;}printf(\n);
/*输出报到STEP的人*/pos=0;count=0;while(arr[pos].data!=0){count++;if(count==STEP)?? {printf(%c,,arr[pos].data);?? count=0;?? } pos=arr[pos].num;}printf(\n);}
输出:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,c,f,i,l,o,r,u,x,
(四)/*有26个人组成一个环,1,2,3循环报数,数到3的出列arr[0]到arr[25]是26个人,arr[26]是空数据,arr[27]是插入的人这次向数组编号K和K+1两人之间插入名为A的人数组模拟链表就是方便插入新人*/
#includestdio.h#define STEP 3#define K 10
void m
文档评论(0)