实验一 单链表的基本操作

  • 格式:doc
  • 大小:85.00 KB
  • 文档页数:8

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一单链表的基本操作

姓名:冯礼哲

学号:120802010001

专业:电子信息科学与技术

一、实验目的

1、帮助读者复习C语言程序设计中的知识。

2、熟悉线性表的逻辑结构。

3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。

二、实验内容

实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。

三、基本要求

(1)依次从键盘读入数据,建立带头结点的单链表;

(2)输出单链表中的数据元素

(3)求单链表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。

四、实验步骤

(1)程序如下:

#include

#include

typedef char ElemType;

//********************************建立链表

struct point

{

ElemType data;

struct point *next;

};

//**********************************置空链表estnull() void estnull(struct point **p)

{

*p=NULL;

}

//***********************************求链表长度length() int length(struct point **p)

{

int n;

struct point *h;

h=*p;

for(n=0;h!=NULL;n++)//求长度

{

h=h->next;

}

return n;

}

//***********************************按位置取结点take() char take(struct point **p,int i)

{

int j;

struct point *h;

h=*p;

for(j=1;j

{

h=h->next;

}

if (h!=NULL)

return(h->data);

else

{

printf("ERROR\n");

}

}

//***********************************按值查找address()

int address(struct point **p,ElemType x)

{

int m;

struct point *h;

h=*p;

for(m=1;h!=NULL && h->data!=x;m++) //查找相应的第一个结点 {

h=h->next;

}

if (h==NULL) //未找到相应的结点

return(-1);

else //找到相应的结点

return(m);

}

//********************************插入结点insert()

void insert(struct point **p,ElemType x,int i)

{

int j;

struct point *s,*h;

h=*p;

for(j=1;j

{

h=h->next;

}

s=(struct point *)malloc(sizeof(struct point));

s->data=x;

if (i==1) //插入的结点作为头结点

{

s->next=h;

*p=s;

}

else

{

s->next=h->next;

h->next=s;

}

}

//**********************************删除结点del()

del(struct point **p,int i)

{int j;

struct point *s,*h;

h=*p;

if(i==1)

{s=h;

*p=h->next;

}

else

{for(j=1;j

{

h=h->next;

}

if(!(h->next)||j

s=h->next;

h->next=s->next;}

free(s);

}

//***********************************显示链表display()

void display(struct point **p)

{

int i;

struct point *h;

h=*p;

printf("单链表显示:");

if (h==NULL) //链表为空时

printf("链表为空!");

else

{

for(i=1;(h->next)!=NULL;i++)

{ printf("%c->",h->data);

h=h->next;}

printf("%c",h->data);

}

printf("\n");

}

void main()

{

struct point *head;

char x[80],j;

int i,t=0;

estnull(&head);

printf("请输入依次插入的元素:\n");

gets(x);

for(i=0;x[i]!=0;i++)

insert(&head,x[i],i+1);

printf("插入第1个和第3个结点m、n\n");

insert(&head,'m',1);

insert(&head,'n',3);

display(&head);

printf("链表的长度为:%d\n",length(&head)); printf("请输入要取结点的位置:");