单链表的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档