一个数据结构的题目,很急

4、实验方法第一步:定义单链表的存储结构。第二步:编写单链表操作的具体函数定义。第三步:使用定义的单链表并调用单链表的一些操作,实现具体运算。具体函数的定义有:1)ins... 4、 实验方法
第一步:定义单链表的存储结构。
第二步:编写单链表操作的具体函数定义。
第三步:使用定义的单链表并调用单链表的一些操作,实现具体运算。
具体函数的定义有:
1) insert(L,i,x)在单链表的第i个元素之前插入一个新元素x.
2) deletet(L,i) 删除单链表的第i个元素。
3) listprint(L) 输出单链表。
注意:每完成一个步骤,必须及时输出链表元素,以便于观察操作结果。
#include "stdio.h"
#include "malloc.h" /*包含动态分配内存函数*/
#define NULL 0
#define TRUE 1
#define FALSE 0

typedef int elemtype;
typedef struct node /*链表结点类型定义*/
{elemtype data; /*结点数据域*/
struct node *next; /*结点的指针域*/
}linklist;

linklist *creatlist() /*创建链表函数—以按下任意建开始创建,以输入字符‘?’{char ch; 表示结束标志*/
int x;
linklist *head,*r,*p;
p=(linklist*)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
ch=getchar();
while(ch!='?')
{scanf("%d",&x);
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
ch=getchar();
}
return (head);
}

int locate(head,k) /*定位检索函数—如链表中存在值为k的结点,则返回真,否
linklist *head; 则返回假*/
elemtype k;
{linklist *s;
s=head->next;
while(s!=NULL)
if(s->data!=k)
s=s->next;
else
return TRUE;
return FALSE;
}

请调试好上述程序
由于问题太长,下面的是接着上面的

void main() /*主函数*/
{linklist *head; /*定义指向链表的指针head*/
int x;
int i,j;
printf("please input the initial node and start by any key('?'execpt)end with '?'\n");
head=creatlist();
printf("we have created a linklist as follow:\n");
print(head);
printf("now start search,please input the search value:");
scanf("%d",&x);
printf("\n");
if(locate(head,x)) printf("exsist!\n");
else
printf("not exsist!\n");
printf("start insert operation,please input insert position:");
scanf("%d",&i);
insert(head,i,x);
printf("after insertion:\n");
print(head);
printf("now start delete operation,input the delete position please:");
scanf("%d",&j);
delete(head,j);
printf("after deletion:\n");
print(head);
}
展开
 我来答
匿名用户
2009-04-25
展开全部
调试以后的程序:

#include "stdio.h"
#include "malloc.h" /*包含动态分配内存函数*/
#define NULL 0
#define TRUE 1
#define FALSE 0

typedef int elemtype;
typedef struct node /*链表结点类型定义*/
{elemtype data; /*结点数据域*/
struct node *next; /*结点的指针域*/
}linklist;

linklist *creatlist() /*创建链表函数-以按下任意建开始创建,以输入字符'?'表示结束标志*/
{ int x;char ch;
linklist *head,*r,*p;
p=(linklist*)malloc(sizeof(linklist));
head=p;
p->next=NULL;
r=p;
ch=getchar();
do
{scanf("%d",&x);
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
ch=getchar();
} while(ch!='?');
return (head);
}

int locate(head,k) /*定位检索函数-如链表中存在值为k的结点,则返回真,否则返回假*/
linklist *head;
elemtype k;
{linklist *s;
s=head->next;
while(s!=NULL)
if(s->data!=k)
s=s->next;
else
return TRUE;
return FALSE;
}

void insert(linklist *head,int i,elemtype x)/*在链表head的第i个位置插入*/
{ int j;
linklist *s,*p;
p=head;
j=0;
while(p->next&&j<i-1){p=p->next;j++;}
if(!p||j>i-1) printf("error!");
s=(linklist *)malloc(sizeof(linklist));
if(!s) printf("overflow!");
s->data=x;
s->next=p->next;
p->next=s;
}

void del(linklist *head,int i) /*删除链表的第i个结点*/
{int j=0;
linklist *p,*q;
p=head;j=0;
while((p->next!=NULL)&&(j<i-1))
{p=p->next;
j++;
}
if(p->next!=NULL)
{q=p->next;
p->next=p->next->next;
free(q);
}
else printf("illegal delete position,delete failed!");
}

void print(linklist *head) /*打印出链表head中各个结点的值*/
{linklist *p;
p=head->next;
while(p!=NULL)
{printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

void main() /*主函数*/
{linklist *head; /*定义指向链表的指针head*/
int x;
int i,j;
printf("please input the initial node and start by any key('?'execpt)end with '?'\n");
head=creatlist();
printf("we have created a linklist as follow:\n");
print(head);
printf("now start search,please input the search value:");
scanf("%d",&x);
printf("\n");
if(locate(head,x)) printf("exsist!\n");
else
printf("not exsist!\n");
printf("start insert operation,please input insert position:");
scanf("%d",&i);
insert(head,i,x);
printf("after insertion:\n");
print(head);
printf("now start delete operation,input the delete position please:");
scanf("%d",&j);
del(head,j);
printf("after deletion:\n");
print(head);
}
创远信科
2024-07-24 广告
材料测试数据库是我们公司精心构建的核心资源之一,它集成了丰富的材料测试数据,涵盖了从基础物理性能到高级化学特性的全方位信息。这一数据库不仅为研发人员提供了宝贵的数据支持,也助力了新材料开发和技术创新。我们持续更新数据库内容,确保数据的准确性... 点击进入详情页
本回答由创远信科提供
匿名用户
2009-05-13
展开全部
由先序序列可知结点A是根结点,然后在选项中找A,A结点前面的结点表示都是在根A的左侧的,A后面的结点是出现在A右侧的。再分析一下各个选项:

B项:C在A的前面说明C是A右孩子的一个结点,再根据先序序列可分析,既然C都在A左边,B也应在左边,所以B应该排在A前面
C项:D在A前,同样BC也应在A前面
D项同理,F是在A前面,BCDE都应排在A前面。

只有A正确。这种判断方法对做选择题很有用,但是你可能还是没有完全理解,如果不理解就自己画画图,分析一下所有的可能性,会对你加深理解有帮助
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式