实验一 单链表的基本操作
- 格式:doc
- 大小:85.00 KB
- 文档页数:8
实验一单链表的基本操作
姓名:冯礼哲
学号: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("请输入要取结点的位置:");