c程课件part5-ch122结构联合及其应用_第1页
c程课件part5-ch122结构联合及其应用_第2页
c程课件part5-ch122结构联合及其应用_第3页
c程课件part5-ch122结构联合及其应用_第4页
c程课件part5-ch122结构联合及其应用_第5页
免费预览已结束,剩余31页可下载查看

付费下载

下载本文档

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

文档简介

1、Chapter 12/1J=1)对输入的100个整数进行排序,可以用数组来实现:constN = 100;i, aN;for(i = 0; i N; i+) scanf(%d, &ai);Sort(a, N);for(i = 0; i N; i+)prf(%d, ai);22)对输入的若干个整数进行排序(先输入整数的个数n,后输入n个整数),可以用动态数组来实现:n, i;*pda; scanf(%d, &n);pda = (*)malloc(sizeof() * n);for(i = 0; i n; i+) scanf(%d, &pdai);Sort(pda, n);for(i = 0; i

2、 n; i+)prf(%d, pdai);free(pda);3C99Cn, i;scanf(%d, &n); an;for(i = 0; i n; i+) scanf(%d, &ai);Sort(a, n);for(i = 0; i n; i+)prf(“%d”, ai);43)对输入的若干个整数进行排序(先输入各个整数,最后输入一个结束标志-1),可以用动态调整的动态数组来实现:5constINC = 10;max_len = 20, count = 0, m;*pda = (*)malloc(sizeof() * max_len);scanf(%d, &m);while(m != -1)

3、Sort(pda, count);for(pri = 0; i = max_len)max_len += INC;*q = ( i;*)malloc(sizeof() * max_len);for(i = 0; i data = i; /i10i(1)头部插入结点方式建立链表 for(i=0; inext = head;p*)malloc(sizeof(struct p=(NodeNode); p-data=i;11指针变量赋值地址i#define N 10Node * InsCreate( )Node *head = NULL; i;for(i = 0; i data);/给新结点的数据成员

4、输入值p - next = head; /head的值赋给新结点的指针成员head = p;/将p这个指针变量的值赋给指针变量headreturn head;12这样,第十个结点成为链表的头结点,只要知道头结点的地址(存于head中),就可以访问链表中的所有结点。(2)尾部追加结点方式建立链表 for(i=0; inext = p;p p-next = NULL; Node *p = (Node p-data = i;*)malloc(sizeof(struct Node);13i-1i #define N 10Node * AppCreate( )Node *head = NULL, *ta

5、il = NULL; i;for(i = 0; i data);/给新结点的数据成员输入值p - next = NULL; if(head = NULL)head = p;/给新结点的指针成员赋值/已有链表为空链表的情况else/已有链表不空的情况 tail - next = p;tail = p;return head;14headii0current if(current).!i+1 current-next=p;p Node *p = (Node *)malloc(sizeof(struct Node);! p-data=x; p-next=current-next;15xivoid I

6、nsertNode(Node * head, int i)Node *current = head; int j = 1;/ current指向第一个结点while(j next != NULL)/查找第i个结点current = current - next; j+;/循环结束时,current指向第i个结点或最后一个结点(结点数不够i时)if(j = i)/ current指向第i个结点Node *p = (Node *)malloc(sizeof(struct Node); scanf(%d, & p - data);/创建新结点p - next = current -next; /让第

7、i+1个结点链接在新节点之后current - next = p;/让新结点链接在第i个节点之后else /链表中没有第i个结点printf(没有第%d个结点n, i);16删除第i(i0)个结点if(previous-next满足删除条件) currentcurrent=previous-next;previous free(current);.i-1ii+1previous-next=current-next;17Node * DeleteNode(Node * head, int i)if(i = 1)/删除头结点Node *current = head;/ current指向头结点he

8、ad = head-next;/ head指向新的头结点free(current); /释放删除结点的空间elsereturn head;18elseNode *previous = head; int j = 1;/ previous指向头结点while(j next != NULL)previous = previous - next; j+;/查找第i-1个结点if(previous - next != NULL) /链表中存在第i个结点Node *current = previous - next;/ current指向第i个结点 previous - next = current -

9、 next;/让待删除结点的前后两个结点相链接free(current); /释放第i个结点的空间else/链表中没有第i个结点printf(没有第%d个结点n, i);19headheadreturnpreviouscurrentfree(current). !20 Node * DeleteLastNode(Node * head)Node *previous = NULL, *current = head; while(current - next != NULL)previous = current; current = current - next;/查找最后一个结点,current

10、指向它,previous指向倒数第二个结点if(previous != NULL) /存在倒数第二个结点previous - next = NULL; /让最后一个结点与倒数第二个结点断开 else /链表中只有一个结点head = NULL; /让唯一的结点与头指针断开free(current); return head;/释放删除结点的空间21整个链表的输出(链表的遍历)while(p)pp=p-next;.ii+1prf(%d,p-data);22i-1headvoid PrList(Node * head)if(!head)pr/ f(List is empty. n);elsewhi

11、le(head)pr/while(head != NULL)f(%d, , head - data);head = head - next;prf(n);233;)7while(head - next)+BG*6A=headvoid Deleist(Node * head)while(head)/while(head - next)Node *current = head; head = head - next; free(current);24*25Node * Reverse(Node *head). a0Node *prev = NULL;Node *cur = NULL; Node *

12、next = head; while(next != NULL)a3a1a2prevcurnextprev = cur; cur = next;.next = cur - next; cur - next = prev;return cur;26a3a2a1a0head.Node *RecReverse(Node *head)if(!head)/return NULL;Node *temp = RecReverse(head - next);/if(!temp)/return head;head - next-next = head;/head - next = NULL;/return te

13、mp;/27a3a1a2a012.5N#include #define N 10 struct Nodedata; Node *next;main( )Node *head = AppCreate( ); ListSort(head);/Pr DeleList(head); ist(head);/return 0;28extern Node * AppCreate( ); extern void ListSort(Node *head);extern void PrList(Node * head); extern void Deleist(Node * head);/*“N1N-12”*/v

14、oid ListSort(Node *head)if(head = NULL | head-next = NULL) return;for(Node *p_i = head; p_i - next != NULL; p_i = p_i - next)Node *p_min = p_i;for(Node *p_j = p_i - next; p_j != NULL; p_j = p_j - next) if(p_min - data p_j - data)p_min = p_j;if(p_min != p_i)temp = p_i - data;p_i - data = p_min - data

15、; p_min - data = temp;29/*“ii+1i: 1N-1”*/Node * ListSort(Node *head)/if(head = NULL) return NULL; Node *pre_j;for(Node *pre_i = head; pre_i-next != NULL; )for(Node *p_j = head; p_j != pre_i-next; pre_j = p_j, p_j = p_j - next)if(pre_i-next-data data)/p_j/q Node *q = pre_i - next;pre_i-next = q - next ;if(p_j = head) elseq - next = p_j;goto LOOP;head = q;pre_j - next = q;if(pre_i - next) LOOP: ;pre_i = pre_i - next;return head;3012.6#include struct NodeStuid; float score;NodeStu *next;31extern NodeStu * AppCreate( );extern floistSearch(NodeStu *head); extern void Deleist(Nod

温馨提示

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

评论

0/150

提交评论