|
发表于 2023-10-4 17:30:29
|
显示全部楼层
这段代码中存在一些问题:
1. 在 create 函数中,缺少一个右括号,应该在最后一行加上一个右括号。
2. 在 combine 函数中,没有为 lc 赋初值,应该将 lc 初始化为 l。
3. 在 combine 函数中,应该在最后释放 l2 所占用的内存空间。
4. 在 main 函数中,create 函数没有被调用,应该将注释取消掉,调用 create 函数。
5. 在 main 函数中,combine 函数没有被调用,应该将注释取消掉,调用 combine 函数。
6. 在 main 函数中,没有释放 l 所占用的内存空间,应该在程序结束前释放 l 所占用的内存空间。
下面是修改后的代码:
- #include <stdio.h>
- #include <malloc.h>
- #define ok 1
- typedef int elemtype;
- typedef int status;
- typedef struct lnode{
- elemtype date;
- struct lnode *next;
- }lnode,*linklist;
- typedef struct polynode{
- int coef;//系数
- int expn;//指数
- struct polynode *next;
- }polynode , *polynomial;
- void initlist(linklist &l,int n)
- {
- elemtype e;
- int i;
- l=(linklist)malloc(sizeof(lnode));
- l->next=NULL;
- printf("请逆序输入数字:\n");
- for(i=0;i<n;i++){
- scanf("%d",&e);
- linklist p=(linklist)malloc(sizeof(lnode));
- p->date=e;
- p->next=l->next;
- l->next=p;
- }
- }
- status create(polynomial &l,int n)
- {
- elemtype f;
- int i,e;
- l=(polynomial)malloc(sizeof(polynode));
- l->next=NULL;
- polynomial r=l;
- printf("请逆序输入数字:\n");
- for(i=0;i<n;i++){
- scanf("%d,%d",&e,&f);
- polynomial p=(polynomial)malloc(sizeof(polynode));
- p->coef=e;
- p->expn=f;
- r->next=p;
- r=p;
- }
- return ok;
- }
- void output(linklist l)
- {
- linklist p=l->next;
- while(p){
- printf("%d ",p->date);
- p=p->next;
- }
- printf("\n");
- }
- void delete1(linklist &l)
- {
- int n,j;
- elemtype e;
- linklist p=l,q;
- printf("请输入你要删除的位置:\n");
- scanf("%d",&n);
- for(j=0;j<n-1;j++)
- {
- p=p->next;
- }
- if(!(p->next))
- {
- printf("error\n");
- }
- else
- q=p->next;
- p->next=q->next;
- e=q->date;
- free(q);
- printf("被删除的数为:%d\n",e);
- }
- void insert(linklist &l)
- {
- linklist p=l,q=(linklist)malloc(sizeof(lnode));
- int j,i;
- elemtype e;
- printf("请输入你想插入的位置:\n");
- scanf("%d",&i);
- printf("请输入你想插入的数字:\n");
- scanf("%d",&e);
- for(j=0;j<i-1;j++){
- p=p->next;
- }
- q->date=e;
- q->next=p->next;
- p->next=q;
- }
- void search(linklist l)
- {
- linklist p=l;
- elemtype i,e;
- int j=0;
- printf("请输入你想查找的位置:\n");
- scanf("%d",&i);
- for(j=0;j<i;j++)
- {
- if(!p){
- break;
- }
- p=p->next;
- }
- if(p){
- printf("查找成功!");
- printf("该数值为%d\n",p->date) ;
- }
- else
- {
- printf("查找失败!");
- }
- }
- void sort(linklist &l)
- {
- linklist p,q;
- elemtype x;
- for(p=l->next;p->next!=NULL;p=p->next){
- for(q=l->next;q->next!=NULL;q=q->next){
- if(q->date>=q->next->date){
- x=q->date;
- q->date=q->next->date;
- q->next->date=x;
- }
- }
- }
- }
- void combine(linklist &l,linklist &l2)
- {
- linklist pa,pb,pc,lc;
- pa=l->next;
- pb=l2->next;
- lc=pc=l;
- while(pa&&pb){
- if(pa->date<=pb->date)
- {
- pc->next=pa;
- pc=pa;
- pa=pa->next;
- }
- else
- {
- pc->next=pb;
- pc=pb;
- pb=pb->next;
- }
- }
- pc->next=pa?pa:pb;
- free(l2);
- }
- int main()
- {
- linklist l,l2;
- polynomial pa,pb;
- int n,m,i;
- printf("请输入你想建立的长度:\n");
- scanf("%d",&n);
- initlist(l,n);
- output(l);
- delete1(l);
- output(l);
- insert(l);
- output(l);
- search(l);
- sort(l);
- printf("排序后为:");
- output(l);
- printf("请输入你想建立的第二个表的长度:\n");
- scanf("%d",&m);
- initlist(l2,m);
- sort(l2);
- printf("排序后为:");
- output(l2);
- printf("\n两个表合并后为:");
- combine(l,l2);
- output(l);
- printf("请输入第一个多项式的长度:\n");
- scanf("%d",&i);
- create(pa,i);
- free(l);
- return 0;
- }
复制代码 |
|