前言:米有难度,这个学期老师布置的数据结构的课程设计,这边记录下
一元多项式线性表实现
| #include<stdio.h> |
| #include<stdlib.h> |
| #include<string.h> |
| #define MAX 99 |
| |
| void get_menu() |
| { |
| printf(" -------------------------------------------------------------------\n"); |
| printf(" |================== 一元多项式的运算 =================|\n"); |
| printf(" |================== 1.相加(+) =================|\n"); |
| printf(" |================== 2.相减(-) =================|\n"); |
| printf(" |================== 3.相乘(*) =================|\n"); |
| printf(" -------------------------------------------------------------------\n"); |
| } |
| |
| int* init_linner_table() |
| { |
| int* p_node = (int*)malloc(sizeof(int)*MAX); |
| memset(p_node,0,sizeof(int)*MAX); |
| if(p_node!=NULL)return p_node; |
| return NULL; |
| } |
| |
| int get_size(int* p_node) |
| { |
| int num=0; |
| for(int i=0;i<MAX;i++) |
| if(p_node[i])num++; |
| return num; |
| } |
| |
| void show_table(int* p_node, char* str) |
| { |
| printf("%s: ", str); |
| |
| |
| for(int i=0;i<MAX;i++) |
| if(p_node[i]!=0)printf("%d*x^%d ", p_node[i], i); |
| printf("\n"); |
| } |
| |
| void init_value(int* p_node) |
| { |
| int coef,exp,size; |
| printf("input init size: "); |
| scanf("%d", &size); |
| if(size<=0)printf("init_value fail...\n"); |
| for(int i=0;i<size;i++) |
| { |
| scanf("%d %d", &coef, &exp); |
| p_node[exp]+=coef; |
| } |
| show_table(p_node, (char*)"init_value"); |
| } |
| |
| void add(int* p_node1, int* p_node2) |
| { |
| int* p_node3 = init_linner_table(); |
| memcpy(p_node3, p_node1, sizeof(int)*MAX); |
| for(int i=0;i<MAX;i++) |
| if(p_node2[i]!=0||p_node1[i]!=0)p_node3[i]+=p_node2[i]; |
| show_table(p_node3, (char*)"add"); |
| } |
| |
| |
| void sub(int* p_node1, int* p_node2) |
| { |
| int* p_node3 = init_linner_table(); |
| memcpy(p_node3, p_node1, sizeof(int)*MAX); |
| for(int i=0;i<MAX;i++) |
| if(p_node2[i]!=0)p_node3[i]-=p_node2[i]; |
| show_table(p_node3, (char*)"sub"); |
| } |
| |
| void multi(int* p_node1, int* p_node2) |
| { |
| int* p_node3 = init_linner_table(); |
| for(int i=0;i<MAX;i++) |
| for(int j=0;j<MAX;j++) |
| if(p_node1[i]!=0&&p_node2[j]!=0)p_node3[i+j]+=p_node1[i]*p_node2[j]; |
| show_table(p_node3, (char*)"multi"); |
| if(p_node3==NULL)free(p_node3); |
| } |
| |
| |
| int main() |
| { |
| get_menu(); |
| int* p_node1 = init_linner_table(); |
| int* p_node2 = init_linner_table(); |
| init_value(p_node1); |
| init_value(p_node2); |
| add(p_node1, p_node2); |
| sub(p_node1, p_node2); |
| multi(p_node1, p_node2); |
| if(p_node1!=NULL)free(p_node1); |
| if(p_node2!=NULL)free(p_node2); |
| return 0; |
| } |
一元多项式链表实现
| #define _CRT_SECURE_NO_WARNINGS |
| #include<stdio.h> |
| #include<stdlib.h> |
| #include<string.h> |
| |
| typedef struct _node{ |
| int coef; |
| int exp; |
| struct _node *next; |
| }node; |
| |
| void get_menu() |
| { |
| printf(" -------------------------------------------------------------------\n"); |
| printf(" |================== 一元多项式的运算 =================|\n"); |
| printf(" |================== 1.相加(+) =================|\n"); |
| printf(" |================== 2.相减(-) =================|\n"); |
| printf(" |================== 3.相乘(*) =================|\n"); |
| printf(" -------------------------------------------------------------------\n\n"); |
| } |
| |
| void create_node2(node* p_before_node, int coef, int exp) |
| { |
| node* p_current_node = p_before_node->next; |
| node* p_new_node = NULL; |
| int i_flag = 1; |
| while (p_current_node!=NULL) |
| { |
| if (p_current_node->exp>exp) |
| { |
| p_new_node = (node*)malloc(sizeof(node)); |
| p_new_node->exp = exp; |
| p_new_node->coef = coef; |
| p_new_node->next = p_current_node; |
| p_before_node->next = p_new_node; |
| i_flag = 0; |
| break; |
| } |
| else if(p_current_node->exp==exp){ |
| p_current_node->coef += coef; |
| i_flag = 0; |
| break; |
| } |
| |
| p_before_node = p_current_node; |
| p_current_node = p_current_node->next; |
| } |
| |
| if (i_flag) |
| { |
| p_before_node->next = (node*)malloc(sizeof(node)); |
| p_before_node->next->coef = coef; |
| p_before_node->next->exp = exp; |
| p_before_node->next->next = NULL; |
| } |
| } |
| |
| void init_value(node* p_node) |
| { |
| int coef, exp, size; |
| printf("input init size: "); |
| scanf("%d", &size); |
| for (int i = 0; i<size; i++) |
| { |
| scanf("%d %d", &coef, &exp); |
| create_node2(p_node, coef, exp); |
| } |
| } |
| |
| void show_node(node* p_node) |
| { |
| if (p_node == NULL)return; |
| while (p_node != NULL) |
| { |
| printf("%d*x^%d ", p_node->coef, p_node->exp); |
| p_node = p_node->next; |
| } |
| printf("\n"); |
| } |
| |
| |
| void add(node* p_node1, node* p_node2, char* str) |
| { |
| int sum = 0; |
| node* p_node3 = (node*)malloc(sizeof(node));p_node3->coef = 0;p_node3->exp = 0;p_node3->next = NULL; |
| printf("====%s====\n", str); |
| while (p_node1!=NULL&&p_node2!=NULL) |
| { |
| if (p_node1->exp == p_node2->exp) |
| { |
| sum = p_node1->coef + p_node2->coef; |
| if (sum)create_node2(p_node3, sum, p_node1->exp); |
| p_node1 = p_node1->next; |
| p_node2 = p_node2->next; |
| }else if (p_node1->exp>p_node2->exp) |
| { |
| create_node2(p_node3, p_node2->coef, p_node2->exp); |
| p_node2 = p_node2->next; |
| } |
| else if (p_node1->exp<p_node2->exp) |
| { |
| create_node2(p_node3, p_node1->coef, p_node1->exp); |
| p_node1 = p_node1->next; |
| } |
| } |
| |
| while (p_node1 != NULL&&p_node2 == NULL) |
| { |
| create_node2(p_node3, p_node1->coef, p_node1->exp); |
| p_node1 = p_node1->next; |
| } |
| |
| while (p_node1==NULL&&p_node2!=NULL) |
| { |
| create_node2(p_node3, p_node2->coef, p_node2->exp); |
| p_node2 = p_node2->next; |
| } |
| |
| show_node(p_node3->next); |
| } |
| |
| void sub(node* p_node1, node* p_node2, char* str) |
| { |
| int sum_coef = 0; |
| node* p_node3 = (node*)malloc(sizeof(node)); |
| p_node3->coef = 0; |
| p_node3->exp = 0; |
| p_node3->next = NULL; |
| printf("====%s====\n", str); |
| while (p_node1 != NULL&&p_node2 != NULL) |
| { |
| if (p_node1->exp == p_node2->exp) |
| { |
| sum_coef = p_node1->coef - p_node2->coef; |
| if (sum_coef)create_node2(p_node3, sum_coef, p_node1->exp); |
| p_node1 = p_node1->next; |
| p_node2 = p_node2->next; |
| } |
| else if (p_node1->exp>p_node2->exp) |
| { |
| create_node2(p_node3, p_node2->coef, p_node2->exp); |
| p_node2 = p_node2->next; |
| } |
| else if (p_node1->exp<p_node2->exp) |
| { |
| create_node2(p_node3, p_node1->coef, p_node1->exp); |
| p_node1 = p_node1->next; |
| } |
| } |
| |
| while (p_node1 != NULL&&p_node2 == NULL) |
| { |
| create_node2(p_node3, p_node1->coef, p_node1->exp); |
| p_node1 = p_node1->next; |
| } |
| |
| while (p_node1 == NULL&&p_node2 != NULL) |
| { |
| create_node2(p_node3, -p_node2->coef, p_node2->exp); |
| p_node2 = p_node2->next; |
| } |
| |
| show_node(p_node3->next); |
| } |
| |
| |
| void multi(node* p_node1, node* p_node2, char* str) |
| { |
| int sum_coef = 0; |
| node* p_tmp_node = NULL; |
| node* p_node3 = (node*)malloc(sizeof(node)); |
| p_node3->coef = 0; |
| p_node3->exp = 0; |
| p_node3->next = NULL; |
| printf("====%s====\n", str); |
| |
| while (p_node1!=NULL) |
| { |
| p_tmp_node = p_node2; |
| while (p_tmp_node != NULL) |
| { |
| create_node2(p_node3, p_tmp_node->coef*p_node1->coef, p_tmp_node->exp+p_node1->exp); |
| p_tmp_node = p_tmp_node->next; |
| } |
| p_node1 = p_node1->next; |
| } |
| show_node(p_node3->next); |
| } |
| |
| int main() |
| { |
| node* p_node1 = (node*)malloc(sizeof(node)); |
| node* p_node2 = (node*)malloc(sizeof(node)); |
| get_menu(); |
| p_node1->coef = 0; |
| p_node1->exp = 0; |
| p_node1->next = NULL; |
| p_node2->coef = 0; |
| p_node2->exp = 0; |
| p_node2->next = NULL; |
| init_value(p_node1); |
| show_node(p_node1->next); |
| init_value(p_node2); |
| show_node(p_node2->next); |
| add(p_node1->next, p_node2->next, (char*)"add"); |
| sub(p_node1->next, p_node2->next, (char*)"sub"); |
| multi(p_node1->next, p_node2->next, (char*)"multi"); |
| return 0; |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY