博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构总结:(二)链表
阅读量:5249 次
发布时间:2019-06-14

本文共 9661 字,大约阅读时间需要 32 分钟。

白老师题目,把链表总结了一下:

Description

对于一元多项式  p(x)=p0+p1x+p2x2 +pnx ,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2

编程实现两个多项式的相加
例如5+x+2x2+3x3-5-x+6x2+4x4
,两者相加结果:
8x2+3x3+4x4
其中系数5和-5都是x的0次方的系数,相加后为0,所以不显示。x的1次方同理不显示。
可用顺序表或单链表实现

 

Input

第1行:输入t表示有t组测试数据

第2行:输入n表示有第1组的第1个多项式包含n个项

第3行:输入第一项的系数和指数,以此类推输入n行

接着输入m表示第1组的第2个多项式包含m项

同理输入第2个多项式的m个项的系数和指数

参考上面输入第2组数据,以此类推输入t组

假设所有数据都是整数

 

Output

对于每1组数据,先用两行输出两个原来的多项式,再用一行输出运算结果,不必考虑结果全为0的情况

输出格式参考样本数据,格式要求包括:

1.如果指数或系数是负数,用小括号括起来

2.如果系数为0,则该项不用输出

3.如果指数不为0,则用符号^表示,例如x的3次方,表示为x^3

4.多项式的每个项之间用符号+连接,每个+两边加1个空格隔开

Sample Input

2 4 5 0 1 1 2 2 3 3 4 -5 0 -1 1 6 2 4 4 3 -3 0 -5 1 2 2 4 9 -1 2 0 3 1 -2 2

Sample Output

5 + 1x^1 + 2x^2 + 3x^3 (-5) + (-1)x^1 + 6x^2 + 4x^4 8x^2 + 3x^3 + 4x^4 (-3) + (-5)x^1 + 2x^2 9x^(-1) + 2 + 3x^1 + (-2)x^2 9x^(-1) + (-1) + (-2)x^1
 
 
代码:
 
1 #include 
2 #include
3 #include
4 5 int A[200]; 6 int B[200]; 7 8 void print(int s[]){ 9 int i;10 int flag = 1;11 for(i=0;i<200;++i){12 if(s[i]){13 if(flag == 1){14 flag = 0;15 }16 else printf(" + ");17 if(s[i]>0) printf("%d", s[i]);18 else printf("(%d)", s[i]);19 if(i != 100) printf("x^");20 if(i > 100) printf("%d", i-100);21 if(i < 100) printf("(%d)", i-100);22 }23 }24 printf("\n");25 }26 27 int main(int argc, char const *argv[])28 {29 int n, t, i, value, pos;30 scanf("%d", &t);31 while(t--){32 memset(A, 0, sizeof(A));33 memset(B, 0, sizeof(B));34 scanf("%d", &n);35 for(i=0;i

 

Description

对于一元多项式
 p(x)=p
0
+p
1
x+p
2
x
2
+p
n
x
 
,每个项都有系数和指数两部分,例如
p2x2
的系数为p2,指数为2
 
编程实现两个多项式的相乘
例如5+x,-5+6x2
,相乘结果:-25-5x+30x
2+6x3
可用顺序表或单链表实现

 

Input

第1行:输入t表示有t组测试数据

第2行:输入n表示有第1组的第1个多项式包含n个项

第3行:输入第一项的系数和指数,以此类推输入n行

接着输入m表示第1组的第2个多项式包含m项

同理输入第2个多项式的m个项的系数和指数

参考上面输入第2组数据,以此类推输入t组

假设所有数据都是整数

Output

对于每1组数据,先用两行输出两个原来的多项式,再用一行输出运算结果,不必考虑结果全为0的情况

输出格式参考样本数据,格式要求包括:

1.如果指数或系数是负数,用小括号括起来

2.如果系数为0,则该项不用输出

3.如果指数不为0,则用符号^表示,例如x的3次方,表示为x^3

4.多项式的每个项之间用符号+连接,每个+两边加1个空格隔开

 

Sample Input

2 2 5 0 1 1 2 -5 0 6 2 3 1 0 1 1 1 2 3 2 -1 -1 0 -1 1

Sample Output

5 + 1x^1 (-5) + 6x^2 (-25) + (-5)x^1 + 30x^2 + 6x^3 1 + 1x^1 + 1x^2 2x^(-1) + (-1) + (-1)x^1 2x^(-1) + 1 + (-2)x^2 + (-1)x^3
 
 
1 #include 
2 #include
3 #include
4 5 int A[200],B[200],C[200],A1[100],B1[100]; 6 7 void print(int s[]){ 8 int i, flag = 1; 9 for(i=0;i<200;++i){10 if(s[i]){11 if(flag == 1){flag = 0;}12 else printf(" + ");13 if(s[i]>0) printf("%d", s[i]);14 else printf("(%d)", s[i]);15 if(i != 100) printf("x^");16 if(i > 100) printf("%d", i-100);17 if(i < 100) printf("(%d)", i-100);18 }19 }20 printf("\n");21 }22 23 int main(int argc, char const *argv[])24 {25 int n1, n2, n, t, i, j, value, pos;26 scanf("%d", &t);27 while(t--){28 memset(A, 0, sizeof(A));29 memset(B, 0, sizeof(B));30 memset(C, 0, sizeof(C));31 scanf("%d", &n1);32 for(i=0;i

 

Description

用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置。

注意不能简单交换两个结点包含数据,必须通过修改指针来实现两个结点的位置交换

交换函数定义可以参考:

swap(int  pa, int pb)  //pa和pb表示两个结点在单链表的位置序号

swap (ListNode * p, ListNode * q)  //p和q表示指向两个结点的指针

Input

第1行先输入n表示有n个数据,接着输入n个数据

第2行输入要交换的两个结点位置

第3行输入要交换的两个结点位置

 

 

Output

第一行输出单链表创建后的所有数据,数据之间用空格隔开

第二行输出执行第1次交换操作后的单链表数据,数据之间用空格隔开

第三行输出执行第2次交换操作后的单链表数据,数据之间用空格隔开

如果发现输入位置不合法,输出字符串error,不必输出单链表

Sample Input

5 11 22 33 44 55 1 4 2 6

Sample Output

11 22 33 44 55 44 22 33 11 55 error
 
 
1 #include 
2 #include
3 4 typedef struct node *link; 5 typedef struct node{ 6 int data; 7 link next; 8 }Node; 9 int n;10 11 void insert(int pos, int value, link L){12 int i;13 link y = malloc(sizeof(Node));14 y->data = value;15 link p = L;16 for(i=0;i
next;18 y->next = p->next;19 p->next = y;20 }21 22 void print(link L){23 int i;24 link p = L->next;25 while(p){26 if(p==L->next)27 printf("%d", p->data);28 else printf(" %d", p->data);29 p = p->next;30 }31 printf("\n");32 }33 34 void swap(int pos1, int pos2, link L){35 int i;36 if(pos1 < 0 || pos1 > n || pos2 < 0 || pos2 > n){37 printf("error\n");38 return ;39 }40 link t1, t2, l1, l2;41 link p1 = L;42 link p2 = L;43 for(i=0;i
next;45 t1 = p1->next;46 l1 = t1->next;47 for(i=0;i
next;49 t2 = p2->next;50 l2 = t2->next;51 52 if(l1 == t2){53 p1->next = t2;54 t2->next = t1;55 t1->next = l2;56 print(L);57 return;58 }59 60 p1->next = t2;61 t2->next = l1;62 t1->next = l2;63 p2->next = t1;64 print(L);65 }66 67 int main(int argc, char const *argv[])68 {69 int i, pos1, pos2;70 int value;71 link L = malloc(sizeof(Node));72 L->next = 0;73 scanf("%d", &n);74 for(i=0;i

 

Description

假定两个单链表是递增有序,实现两个单链表的合并,继续保持递增有序

如果大家用了前面的链表类定义,请屏蔽析构函数,否则可能会出错

Input

 

第1行先输入n表示有n个数据,接着输入n个数据
 
第2行先输入m表示有M个数据,接着输入m个数据
 

 

Output

输出合并后的单链表数据,数据之间用空格隔开

Sample Input

3 11 33 55 4 22 44 66 88

Sample Output

11 22 33 44 55 66 88
 
 
1 #include 
2 #include
3 typedef struct node *link; 4 typedef struct node{ 5 int data; 6 link next; 7 }Node; 8 9 link init(){10 int n, value, i;11 link L = malloc(sizeof(Node));12 L->next = 0;13 scanf("%d", &n);14 for(i=0;i
data);17 link p = L;18 while(p->next) p = p->next;19 y->next = p->next;20 p->next = y;21 }22 return L;23 }24 25 link guibing(link L1, link L2){26 link L = malloc(sizeof(Node));27 L->next = 0;28 link p1 = L1->next;29 link p2 = L2->next;30 link p = L;31 while(p1 || p2){32 while(p->next) p = p->next;33 if(p1 && p2){34 link y = malloc(sizeof(Node));35 if(p1->data
data){36 y->data = p1->data;37 p1 = p1->next;38 }39 else{40 y->data = p2->data;41 p2 = p2->next;42 }43 y->next = p->next;44 p->next = y;45 }46 else if(p1){47 p->next = p1;48 break;49 }50 else if(p2){51 p->next = p2;52 break;53 }54 }55 return L;56 }57 58 void print(link L){59 link p = L->next;60 while(p){61 printf("%d ", p->data);62 p = p->next;63 }64 printf("\n");65 }66 67 int main(int argc, char const *argv[])68 {69 70 link L1 = init();71 link L2 = init();72 link L3 = guibing(L1, L2);73 print(L3);74 return 0;75 }

 

Input

 

n第1行先输入n表示有n个数据,接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置

Output

 

n

数据之间用空格隔开,

第1行输出创建后的单链表的数据

每成功执行一次操作(插入或删除),输出执行后的单链表数据

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表

Sample Input

6 11 22 33 44 55 66 3 777 1 888 1 11 0 5

Sample Output

11 22 33 44 55 66 11 22 777 33 44 55 66 888 11 22 777 33 44 55 66 11 22 777 33 44 55 66 error error 44

 

1 #include 
2 #include
3 typedef struct node *link; 4 typedef struct node{ 5 int data; 6 link next; 7 }Node; 8 9 int n, len; 10 11 link init(){ 12 link L = malloc(sizeof(Node)); 13 L->next = 0; 14 L->data = 0; 15 return L; 16 } 17 18 void print(link L){ 19 int i; 20 link p = L->next; 21 while(p){ 22 printf("%d ", p->data); 23 p = p->next; 24 } 25 printf("\n"); 26 } 27 28 void insert(int value, int pos, link L){ 29 int i; 30 if(pos<1 || pos > len+1){ 31 printf("error\n"); 32 return ; 33 } 34 link y = malloc(sizeof(Node)); 35 y->data = value; 36 link p = L; 37 for(i=1;i
next; 39 y->next = p->next; 40 p->next = y; 41 ++len; 42 print(L); 43 } 44 45 void _insert(int value, int pos, link L){ 46 int i; 47 link y = malloc(sizeof(Node)); 48 y->data = value; 49 link p = L; 50 for(i=1;i
next; 52 y->next = p->next; 53 p->next = y; 54 ++len; 55 } 56 57 void delete(int pos, link L){ 58 int i; 59 if(pos < 1 || pos > len){ 60 printf("error\n"); 61 return ; 62 } 63 link p = L; 64 for(i=1;i
next; 66 p->next = p->next->next; 67 --len; 68 print(L); 69 } 70 71 void find(int pos, link L){ 72 int i; 73 if(pos < 1 || pos > len){ 74 printf("error\n"); 75 return ; 76 } 77 link p = L->next; 78 for(i=1;i
next; 80 printf("%d\n", p->data); 81 } 82 83 int main(int argc, char const *argv[]) 84 { 85 scanf("%d", &n); 86 int i, value, pos; 87 link L = init(); 88 int len = 1; 89 for(i=1;i<=n;++i){ 90 scanf("%d", &value); 91 _insert(value, i, L); 92 } 93 print(L); 94 95 scanf("%d%d", &pos, &value); 96 insert(value, pos, L); 97 98 scanf("%d%d", &pos, &value); 99 insert(value, pos, L);100 101 scanf("%d", &pos);102 delete(pos, L);103 104 scanf("%d", &pos);105 delete(pos, L);106 107 scanf("%d", &pos);108 find(pos, L);109 110 scanf("%d", &pos);111 find(pos, L);112 113 return 0;114 }

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/firstrate/p/3470385.html

你可能感兴趣的文章
mdb2csv
查看>>
C++ const限定符
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
【原创】Maven安装和配置
查看>>
Linux进程管理
查看>>
关于 自定义字体
查看>>
Octotree Chrome安装与使用方法
查看>>
用CALayer实现下载进度条控件
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
可编辑路由—Asp.NET MVC项目编译后,修改路由配置可动态加载
查看>>
UESTC 1330 柱爷与远古法阵【高斯消元】
查看>>
Tomcat修改用户名密码教程
查看>>
模块化概念
查看>>
基本排序
查看>>
前端非对称加密,后端Node.js解密(jsencrypt插件)(不需要密钥转码)
查看>>
list删除、集合遍历删除
查看>>
趣谈Java变量的可见性问题
查看>>
图标字体制作 -- 将SVG制作成图标字体文件,通过引入使用
查看>>
为Eclipse添加C/C++开发工具
查看>>