当前位置:文档之家› 单链表的操作实现实验报告

单链表的操作实现实验报告

puts("* 6--删除7--合并*");
puts("*********************************");
printf("\n");
printf("请选择功能:\n");
scanf("%c",&zdg);
switch(zdg)
{
case'0':
puts("\n\n");
puts(" **************************************");
p=head;
j=0;
if(i<=1||j>i)return NULL;
while(p->next!=0&&j<i)
{
j++;
p=p->next;
}
return p->data;
}
/*删除*/
intDel(LinkList *head,int i)
{
LinkList p,q;
int j=0;
p=(*head);
if(Locate2(head,i)!=0)
printf("查找成功,该%d号位置上的是%d!",i,Locate2(head,i));
else
printf("无此元素,查找失败!");
}
break;
case'6':
puts("\n");
printf("请输入你要删除的元素序号:");
scanf("%d",&i);
删除:从头结点开始,删除第i个结点并释放空间;
输出:当表不为空时,依次输出表中元素;
合并:与顺序表一样,只需为新的结点申请一个空间。
典型测试数据输入:输入数据个数:4
数据:1,2,3,4
输出:1,2,3,4
预期结果:基本实现了单链表的基本各种操作。
程序及运行结果正误判断:□非常好□√正确,还可改进□基本正确,还需改进□还有错误
任课教师评语:
教师签字:年 月 日
注:每学期至少有一次设计性实验。每学期结束请任课教师按时按量统一交到教学秘书处。
源程序文件名及组成文件:#include<stdio.h>,#include<stdlib.h>,#include<conio.h>,#include<windows.h>
1算法设计思想②算法描述
p->data=x;
p->next=head->next;
head->next=p;
}
else break;
}
return 1;
return 0;
}
/*尾部插入*/
LinkList CreatfromT(LinkList head)
{
LinkList p,q,t;
ElemType x;
q=head;t=head;
puts(" * *");
puts(" *谢谢使用,再见!*");
puts(" * *");
puts(" **************************************");
break;
case'1':
puts("\n");
puts("*********************************************************");
{
r->next=p;r=p;p=p->next;
}
else
{
r->next=q;r=q;q=q->next;
}
}
if(p)
{
r->next=p;
}
else
{
r->next=q;
}
free(Lb);
return(Lc);
}
void main()
{
LinkList head,La,Lb;
int i;
char zdg,y;
int x,i;
h=(Node*)malloc(sizeof(Node));
r=h;
printf("请输入数据:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&x);
p=(Node*)malloc(sizeof(Node));
p->data=x;
r->next=p;
r=p;
}
r->next=NULL;
return h;
}
/*头部插入*/
int CreatfromH(LinkList head)
{
LinkList p;
ElemType x;
puts("输入数据,输入-1000结束输入!");
while(1)
{
scanf("%d",&x);
if(x!=-1000)
{
p=(Node*)malloc(sizeof(Node));
puts("输入数据,输入-1000结束输入!");
while(1)
{
scanf("%d",&x);
if(x!=-1000)
{
p=(Node*)malloc(sizeof(Node));
p->data=x;
p->next=NULL;
t->next=p;
t=p;
}
}
return q;
}
int Inslist(LinkList *head,int i,ElemType x)
puts("* 0---般创建1---头部插Hale Waihona Puke 法2---尾部插入法*");
puts("*********************************************************");
printf("请选择:\n");
scanf("%c",&y);
y=getch();
if(y=='0')
设计分析:
初始化:为单链表申请头结点空间,将单链表设置为空;创建:(1)头部插入法:(a)初始化空表;(b)申请新结点并赋值;(c)插入新结点;(d)插入第i个元素。
(2)尾部插入法:
(a)建空表(b)申请结点并赋值;(c)插入第一个结点;(d)r->next=s,r=s;
表长:从表头开始,将指针依次指向各个结点,一直到p->next=NULL为止,用j来计数。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef struct Node
{
ElemType data;
{
printf("输入数字的个数:\n");
scanf("%d",&i);
head=create(i);
}
if(y=='1')
{
CreatfromH(head);
printf("新的单链表为:");
Output(head);
}
if(y=='2')
{
printf("新的单链表为:");
Output(CreatfromT(head));
break;
case'3':
puts("\n");
printf("输入的数据为:\n");
Output(head);
break;
case'4':
puts("\n");
printf("长度为:%d",LengthList(head));
break;
case'5':
puts("\n");
puts("********************************************");
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j=j++;
}
if(p==NULL&&j>i-1)
{
printf("删除位置不合理!");
return 0;
}
q=p->next;
p->next=p->next->next;
free(q);
return 1;
}
/*合并两个单链表*/
Del(&head,i);
Output(head);
break;
case'7':
puts("\n");
相关主题