单链表的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机实验报告
学院:计算机与信息技术学院
专业:计算机科学与技术(师范)课程名称:数据结构
实验题目:单链表建立及操作
班级序号:师范1班
学号:201421012731
学生姓名:邓雪
指导教师:杨红颖
完成时间:2015年12月25号
一、实验目的:
(1)动态地建立单链表;
(2)掌握线性表的基本操作:求长度、插入、删除、查找在链式存储结构上的实现;
(3)熟悉单链表的应用,明确单链表和顺序表的不同。
二、实验环境:
Windows 8.1
Microsoft Visual c++ 6.0
三、实验内容及要求:
建立单链表,实现如下功能:
1、建立单链表并输出(头插法建立单链表);
2、求表长;
3、按位置查找
4、按值查找结点;
5、后插结点;
6、前插结点
7、删除结点;
四、概要设计:
1、通过循环,由键盘输入一串数据。创建并初始化一个单链表。
2、编写实现相关功能函数,完成子函数模块。
3、调用子函数,实现菜单调用功能,完成顺序表的相关操作。
五、代码:
#include
#include
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *head,*p;
//头插法建立单链表
linklist *Creatlistf()
{
char ch;
linklist *head,*s;
head=NULL;
ch=getchar();
printf("请输入顺序表元素(数据以$结束):\n");
while(ch!='$')
{
s=(linklist *)malloc(sizeof(linklist));
s->data=ch;
s->next=head;
head=s;
ch=getchar();
}
return head;
}
//求单链表的长度
void get_length(struct node *head)
{
struct node *p=head->next;
int length=0;
while(p)
{
length++;
p=p->next;
}
head->data=length;
printf("该单链表的长度为:%d\n",head->data);}
//按序号查找结点
linklist *Get(linklist *head,int i)
{
int j;
linklist *p;
p=head;j=0;
while((p->next!=NULL)&&(j
{
p=p->next;
j++;
}
if(i==j)
return p;
}
//按值查找结点
linklist *Locate(linklist *head,datatype key)
{
int pos=0;
p=head->next;
printf("查找结点位置为:");
while(p!=NULL)
{
if(p->data!=key)
{
p=p->next;
pos++;
}
else
{
pos++;
break;
}
}
return p;
}
//后插结点
void Insertafter(linklist *p,datatype x) {
linklist *s;
s=(linklist *)malloc(sizeof(linklist));
s->data=x;
s->next=p->next;
p->next=s;
printf("插入成功");
}
//前插结点
void Insertbefore(linklist *p,datatype x) {
linklist *s;
s=(linklist *)malloc(sizeof(linklist));
s->next=p->next;
s->data = p->data;
p->data=x;
p->next=s;
}
//删除结点
linklist *Deleteafter(linklist *head)
{
int i;
linklist *r,*p;
printf("请输入要删除的结点位置:");
scanf("%d",&i);
if(i==1)
{
r=head;
head=head->next;
}
else
{
p=Get(head,i-1-1);
r=p->next;
p->next=r->next;
}
free(r);
return head;
}
//输出单链表
void output(linklist *p)
{
while(p->next!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
linklist *head;
int k,i,pos;