为啥老是报错啊。
求求各位帮我看看哪里出问题了#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);
} 这段代码中存在一些问题:
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;
}
isdkz 发表于 2023-10-4 17:30
这段代码中存在一些问题:
1. 在 create 函数中,缺少一个右括号,应该在最后一行加上一个右括号。
你好,这个代码我复制过去后也运行不了
页:
[1]