永发信息网

(程序改错)建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。

答案:1  悬赏:20  手机版
解决时间 2021-06-05 11:00
  • 提问者网友:沉默菋噵
  • 2021-06-05 03:25

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
char a[10];
struct node *next;
}linknode, *linklist;

void main()
{
linklist head,p;
char string[20],
head=creatlist();
printf("the former linklist is:\n");
traverselist(head);
printf("input the deleted string:");
scanf("%s",string);
p=check(head,string);
delelistnode(head,p,string);
prinf("the later linklist is :\n");
traverselist(head);
}

linklist creatlist( )//尾插入法建立链表
{ linklist head,r;
char string[20];
head=(linklist)malloc(sizeof(linknode));
head->next=NULL;
r=head;
printf("input a string(输入#为结束):");
scanf("%s",string);
while(strcmp(string,'#'))
{
(linklist)p=(linklist)malloc(sizeof(listnode));
p=check(head,string);//检查是否有重复的字符串输入
if(p==NULL)
{
strcpy(p->a,string);
p->next=NULL;
r->next=p;r=p;
}
printf("input a string(输入#为结束):");
scanf("%s",string);return head;
}

linklist check(linklist head,char string[20])
{
(linklist)r=head->next;
while(strcpy(r->a,string)&&r)
{
r=r->next;
}
return r;
}


delelistnode(linklist head,linklist p,char string[30])
{
(linklist)r=head->next;
while(r->next!=p)
r->next=r;
r->next=p->next;
free(p);
}

traverselist(linklist head)
{ linklist r;
r=head->next;
while(r)
printf("%s ",r->a);
}

运行软件为VC6.0

最佳答案
  • 五星知识达人网友:酒醒三更
  • 2021-06-05 03:58

一、使用函数前应先声明,而你在main中调用的多个函数均在main函数后才进行声明,出现错误。可以这样:


void print();//先声明


main(){ print(); }


void print() //这儿对函数功能进行详细的定义


{


}


或者直接把main()函数写在最后边就行了。


二、(linklist)p=(linklist)malloc(sizeof(listnode));
(linklist)p和linklist p含义不同,前者表示类型转换,而后者表示定义




先把这两类错误改了再说吧。


我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯