第二章:线性表算法设计题(5-8)
2015-01-05 12:59
246 查看
问题描述:
(5)将链表A分解为B和C;B为值小于0的,C为值大于0的;
(6)一遍遍历,寻找单链表中的最大值;
(7)一遍遍历,将链表的所有连接方向逆转;且利用原表的存储空间;
(8)删除链表A中大于max,小于min的值;
代码实现:
(5)将链表A分解为B和C;B为值小于0的,C为值大于0的;
(6)一遍遍历,寻找单链表中的最大值;
(7)一遍遍历,将链表的所有连接方向逆转;且利用原表的存储空间;
(8)删除链表A中大于max,小于min的值;
代码实现:
001 | #include <stdio.h> |
002 | #include <string.h> |
003 | #define Status in |
004 | #define ERROR 0 |
005 | #define OK 1 |
006 | //定义的结点类型; |
007 | typedef struct |
008 | { |
009 | char name[20]; |
010 | int number; |
011 | }Student; |
012 | typedef struct LNode |
013 | { |
014 | Student student; |
015 | LNode *next; |
016 | }LNode, *LinkList; |
017 |
018 | void CreatList(LinkList L1) |
019 | { |
020 | LinkList r=L1; int n; |
021 | //链表的建立,后插法; |
022 | printf ( "请输入需要建立的结点数目:\n" ); scanf ( "%d" ,&n); |
023 | for ( int i=0;i<n;i++) |
024 | { |
025 | int x; |
026 | scanf ( "%d" ,&x); |
027 | LinkList p = new LNode; |
028 | p->student.number = x; |
029 | r->next = p; r= p; |
030 | } |
031 | r->next = NULL; |
032 | } |
033 |
034 | void Fen(LinkList L1,LinkList L2,LinkList L3) |
035 | { |
036 | //将表A分解为两个表,B表为大于0的元素;C表为小于0的元素; |
037 | LinkList pa,pb,pc; |
038 | pa=L1->next; |
039 | pb=L2;pc=L3; |
040 | while (pa) |
041 | { |
042 | if (pa->student.number < 0) |
043 | {pb->next=pa;pb=pa;} |
044 | else |
045 | {pc->next=pa;pc=pa;} |
046 | pa=pa->next; |
047 | } |
048 | pb->next=NULL;pc->next=NULL; |
049 | //最后需要将L2,L3最后一个结点的next指空; |
050 | } |
051 | void Print(LinkList L) |
052 | { |
053 | //输出链表中的值; |
054 | LinkList p =L->next; |
055 | while (p) |
056 | { |
057 | printf ( "%d " ,p->student.number); |
058 | p=p->next; |
059 | } |
060 | printf ( "结点输出完毕!\n" ); |
061 | } |
062 | void Xun(LinkList L,Student &student) |
063 | { |
064 | //查找链表结点中值最大的; |
065 | LinkList p=L->next; |
066 | student.number=p->student.number; |
067 | while (p) |
068 | { |
069 | if (p->student.number > student.number) |
070 | student.number=p->student.number; |
071 | p=p->next; |
072 | } |
073 | printf ( "查询完毕!\n" ); |
074 | } |
075 |
076 | void Ni(LinkList L) |
077 | { |
078 | //逆序链表的操作; |
079 | LinkList p=L->next; |
080 | LinkList prior,r; |
081 | prior = NULL; |
082 | while (p) |
083 | { |
084 | r = p->next; |
085 | p->next=prior;prior=p; |
086 | p=r;r=r->next; |
087 | if (!r) break ; |
088 | } |
089 | p->next=prior; |
090 | L->next = p; |
091 | printf ( "逆序操作完毕!\n" ); |
092 | } |
093 |
094 | void Shan(LinkList L, int max, int min) |
095 | { |
096 | //删除链表中大于max小于min的值; |
097 | LinkList p =L->next; |
098 | LinkList prior = L; |
099 | while (p) |
100 | { |
101 | if (p->student.number>max || p->student.number< min) |
102 | { |
103 | if (p->next==NULL) |
104 | {prior->next=NULL; break ;} |
105 | else |
106 | {prior->next=p->next;p=p->next;} |
107 | } |
108 | else |
109 | {p=p->next;prior=prior->next;} |
110 | } |
111 | prior->next=NULL; |
112 | printf ( "删除完毕!\n" ); |
113 | } |
114 | int main() |
115 | { |
116 | LinkList L1,L2,L3; |
117 | int i; |
118 | //创建链表; |
119 | L1= new LNode;L2= new LNode;L3= new LNode; |
120 | CreatList(L1); |
121 |
122 | //将链表A分为链表B/C,一个元素大于0;一个小于0; |
123 | /*Fen(L1,L2,L3); |
124 | Print(L2);Print(L3);*/ |
125 |
126 | //一趟遍历,确定链表中的最大值;赋值给结构体e; |
127 | /*Student e; |
128 | Xun(L1,e);printf("%d\n",e.number);*/ |
129 |
130 | //通过一趟遍历,将链表中所有的结点的链接方向逆转; |
131 | /*Ni(L1);Print(L1);*/ |
132 |
133 | //删除链表中大于max,小于min的值; |
134 | printf ( "删除大于max和小于min的值的结点------\n请输入max和min的值:\n" ); |
135 | int max,min; scanf ( "%d %d" ,&max,&min); |
136 | Shan(L1,max,min);Print(L1); |
137 |
138 | return 0; |
139 | } |
相关文章推荐
- 第二章:线性表算法设计题(9-10)
- 第二章:线性表算法设计题(5-8)
- 第二章:线性表算法设计题(9-10)
- 线性表--算法设计题2.13and2.14
- 线性表--算法设计题2.15
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 设计算法将线性表中的元素分为两部分,要求左边都是奇数,右边都是偶数,时间复杂度O(n),空间复杂度O(1)
- [Java算法分析与设计]线性结构与顺序表(List)的实现应用
- 数据结构(严蔚敏)第二章部分算法设计题的实现
- 线性表--算法设计题2.11
- 算法设计题2.24-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版
- 请设计时间和空间上都尽可能高效的算法,求链式存储的线性表的倒数第m个元素
- 线性表--算法设计题2.15
- 最大间隙问题。给定 n 个实数,求这n个实数在数轴上相邻2个数之间的最大差值,设计解最大间隙问题的线性时间算法。
- 《算法导论》读书笔记--第二章 2.3 设计算法
- 线性表--算法设计题2.13and2.14
- 严蔚敏版《数据结构》第二章线性表的算法C语言实现
- 第二章 2.3 设计算法
- PTA 求链式线性表的倒数第K项 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
- <算法导论>第二章 2.3设计算法