C语言数据结构线性表单链表的基本操作,写好了代码,编译无错,运行有错,求找错误在哪?给改正一下。谢谢
#include"stdio.h"#include"stdlib.h"typedefcharDataType;//定义结点的数据域类型typedefstructnode{...
#include "stdio.h"
#include "stdlib.h"
typedef char DataType; //定义结点的数据域类型
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode; //结构体类型标识符
typedef ListNode *LinkList;
ListNode *p; //定义一个指向结点的指针
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p,*s;
p=LocateNode(head,i-1);
if(p==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p,*r;
p=LocateNode(head,i-1);
if(p==NULL||p->next==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
LinkList GreatListRH(void);
p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//尾插法建立带头结点的链表
DataType key;
ListNode *q;
ListNode* LocateNode(LinkList head,DataType key);
printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n"); //按值查找
int i;
DataType x;
printf("输入要插入的数据和位置:");
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
题目如下:
设有如下的链表的描述
typedef char DataType; //定义结点的数据域类型
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode; //结构体类型标识符
typedef ListNode *LinkList;
ListNode *p; //定义一个指向结点的指针
LinkList head; //定义指向链表的头指针
设一个链表的结点数据分别为(’a’,’s’,’d’,’f’,’g’)。
分别编写函数LinkList CreatListRH(void)用尾插法建立带头结点的链表、函数ListNode* LocateNode (LinkList head,DataType key)在带头结点的单链表head中查找其值为key的结点、函数void InsertList(LinkList head,DataType x,int i)将值为x的新结点插入到带头结点的单链表head的第i个结点的位置上、函数void DeleteList(LinkList head,int i)删除带头结点的单链表head上的第i个结点。
在主函数main()中分别调用以上函数实现链表的建立、按值查找、插入结点和删除结点,并在主函数中输出所建立的链表的各结点数据、输出按值查找后是否找到的提示信息、输出插入结点后的链表的各结点数据、输出删除结点后的链表的各结点数据。 展开
#include "stdlib.h"
typedef char DataType; //定义结点的数据域类型
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode; //结构体类型标识符
typedef ListNode *LinkList;
ListNode *p; //定义一个指向结点的指针
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p,*s;
p=LocateNode(head,i-1);
if(p==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p,*r;
p=LocateNode(head,i-1);
if(p==NULL||p->next==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
LinkList GreatListRH(void);
p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//尾插法建立带头结点的链表
DataType key;
ListNode *q;
ListNode* LocateNode(LinkList head,DataType key);
printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n"); //按值查找
int i;
DataType x;
printf("输入要插入的数据和位置:");
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
题目如下:
设有如下的链表的描述
typedef char DataType; //定义结点的数据域类型
typedef struct node{ //结点类型定义
DataType data; //结点的数据域
struct node *next; //结点的指针域
}ListNode; //结构体类型标识符
typedef ListNode *LinkList;
ListNode *p; //定义一个指向结点的指针
LinkList head; //定义指向链表的头指针
设一个链表的结点数据分别为(’a’,’s’,’d’,’f’,’g’)。
分别编写函数LinkList CreatListRH(void)用尾插法建立带头结点的链表、函数ListNode* LocateNode (LinkList head,DataType key)在带头结点的单链表head中查找其值为key的结点、函数void InsertList(LinkList head,DataType x,int i)将值为x的新结点插入到带头结点的单链表head的第i个结点的位置上、函数void DeleteList(LinkList head,int i)删除带头结点的单链表head上的第i个结点。
在主函数main()中分别调用以上函数实现链表的建立、按值查找、插入结点和删除结点,并在主函数中输出所建立的链表的各结点数据、输出按值查找后是否找到的提示信息、输出插入结点后的链表的各结点数据、输出删除结点后的链表的各结点数据。 展开
1个回答
2011-04-06
展开全部
修改如下:
//---------------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
typedef char DataType;
typedef struct node{
DataType data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p=head,*s;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}
if(p==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p=head,*r;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}
if(p==NULL||p->next==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
DataType key;
ListNode *q;
int i;
DataType x;
p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");
printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n");
printf("输入要插入的数据和位置:");
fflush(stdin);
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
typedef char DataType;
typedef struct node{
DataType data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p=head,*s;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}
if(p==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p=head,*r;
int j;
for (j=0; j<i-1; j++) {
p=p->next;
}
if(p==NULL||p->next==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
DataType key;
ListNode *q;
int i;
DataType x;
p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");
printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n");
printf("输入要插入的数据和位置:");
fflush(stdin);
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
//---------------------------------------------------------------------------
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询