第11章_程序设计基础幻灯片.pptVIP

  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文档。上传文档
查看更多
11.4 链表结点的删除 顺序存储结构中元素的删除 根据删除位置的不同,需要移动部分数据 平均需要移动一半长度的数据 链式存储结构中元素的删除 不需要移动元素,只需要修改链表指针 元素删除位置 表头、表中 链表表头删除 p = head; head = head-next; delete p; 链表表中删除 p = head; while( p-next != NULL p-next-data != x ) p = p-next; q = p-next; p-next = q-next; delete q; 【任务11.2】 猴子选大王 n=8, m=3 11.5 循环链表 1 2 3 4 5 6 7 8 猴子被淘汰的顺序:3 6 1 5 2 8 4 起始位置 猴王 #include iostream using namespace std; struct monkey { int num; monkey *next; }; monkey *head, *tail; void create(int nn) { int i; monkey *p,*q; p=new monkey; p-num=1; p-next=NULL; head=p; q = p; for (i=2; i=nn; i++) { p = new monkey; p-num = i; p-next=NULL; q-next=p; q=p; } tail = q; tail-next=head; // 链表尾部指向链表头 } void select(int mm) { int x=0; monkey *p,*q; q=tail; do { p=q-next; x=x+1; if (x % mm==0) { cout p-num 号被删掉\n; q-next=p-next; delete p; // 删除p指向的结点 p=NULL; } else q=p; } while (q!=q-next); head = q; } int main() {  int n,m;  head=NULL;  cout 请输入猴子数:;  cin n;  cout 请输入间隔:m=;  cin m; create(n);  select(m);  cout 猴王是 head-num 号\n; return 0; } 建立循环链表 create ( int nn ) 生成第1个结点,给 head 赋值。利用指针 q 记住这个结点,以便让 指针 p 去生成下面的结点。 (2) 利用计数循环结构,生成第 2 ~ nn 个结点,并将相邻结点链接起来。 (3) 尾结点和头结点链接起来: tail = q;                tail-next = head; head tail q 删除结点函数 select ( int mm ) 从 1 至 mm 报数,凡报到 mm 者删除其所在的结点。 设计两个指针 p 和 q。一开始让 q 指向链表的尾部 q = tail,让 p 指向 q 的下一个结点,开始时让 p 指向 1# 猴所在的结点。 用一个累加器x,初始时 x = 0,从 1# 猴所在结点开始让 x= x+1 =1,如果 mm 是 1 的话,1# 猴所在的 p 结点就要被删除: q-next = p-next; delete p; p=NULL; 1 head 2 8 tail q p 如果mm不是1而是3,在do-while循环中,q和p一起移动两次,p 指向 3# 所在结点,q 指向2# 所在结点,之后删去 3# 所在的结点。 (5) do-while循环的退出条件是 q== q-next,即剩下一个结点时退出循环。当然猴王非其莫属了。 1 head 2 8 q p 3 4 7 head

文档评论(0)

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

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

1亿VIP精品文档

相关文档