高手请进 关于单链表的插入和删除程序

来源:百度知道 编辑:UC知道 时间:2024/06/19 14:33:31
程序有错误 请指教一下 先谢过了

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"ctype.h"
typedef struct node //定义结点
{
char data[10]; //结点的数据域为字符串
struct node *next; //结点的指针域
}ListNode;
typedef ListNode * LinkList; // 自定义LinkList单链表类型
LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表
ListNode *LocateNode(); //函数,按值查找结点
void DeleteList(); //函数,删除指定值的结点
void printlist(); //函数,打印链表中的所有值
void DeleteAll(); //函数,删除所有结点,释放内存
//==========主函数==============
void main()
{
char *ch,*num;
LinkList head;
head=CreatListR1(); //用尾插入法建立单链表,返回头指针
printlist(head); //遍历链表输出其值
printf(" Delete node (y/n):"); //输入“y”或“n”去选择是否删除结点
scanf("%s",num);
if(strcmp(num,&qu

这些声明不对的吧,参数类型没写上
ListNode *LocateNode(); //函数,按值查找结点
void DeleteList(); //函数,删除指定值的结点
void printlist(); //函数,打印链表中的所有值
void DeleteAll(); //函数,删除所有结点,释放内存

还有,输入字符串的时候不能只用个char *ch来的,这个指针没有存储空间,不能随便往它上面写东西,建议定义一个比较大的数组,char ch[100]这样,就像你在struct node里面定义的char data[10]一样。

再就是新建链表的时候,会去找这个字符串是不是已经存在了,但是这个函数有问题。
ListNode *LocateNode(LinkList head, char *key)
{
ListNode *p=head->next;
while(strcmp(p->data,key)!=0 && p) p=p->next;
return p; }
想想一开始,还没有结点的时候,只有一个head,这里head->next应该要设成空指针的,这时候p肯定是无效的,p->data同样也是无效的,不能访问。建议把while里面两部分换一下位置,还有那个!=0多余了,写成while(p&&strcmp(p->data,key))就够了。
到这里创建链表应该没问题了。