白老师题目,把链表总结了一下:
Description
对于一元多项式 p(x)=p0+p1x+p2x2+ … +pnxn ,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2
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
Sample Output
1 #include2 #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
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
Sample Output
1 #include2 #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
Sample Output
1 #include2 #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
Output
输出合并后的单链表数据,数据之间用空格隔开
Sample Input
Sample Output
1 #include2 #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
Output
数据之间用空格隔开,
第1行输出创建后的单链表的数据
每成功执行一次操作(插入或删除),输出执行后的单链表数据
每成功执行一次查找,输出查找到的数据
如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表
Sample Input
Sample Output
1 #include2 #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 }