实验: 单链表的基本操作及应用
- 实验目的
- 掌握单链表的创建,插入、删除、查找和打印算法;
- 实验内容
- 基本要求:
(1)实现单链表的创建;(2)实现单链表的插入;(3)实现单链表的删除
(4)实现单链表的查找;(5)实现单链表的显示;
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
//结构体部分
typedef struct LNode
{
ElemType data;
struct LNode *next;
}Linklist;
//初始化链表
Linklist *InitList(Linklist *L)
{
L = (Linklist *)malloc(sizeof(Linklist));
L->next = NULL;
return L;
}
//创建单链表
Linklist *CreateList(int n)
{
int x,i;
Linklist *L,*r,*p;
L = InitList(L);
r = L;
for(i=0;i<n;i++)
{
scanf("%d",&x);
p = (Linklist *)malloc(sizeof(Linklist));
p->data = x;
p->next = NULL;
r->next = p;
r = r->next;
}
return L;
}
//插入
int Insert(Linklist *L,ElemType item,int x)
{
int i = 1;
Linklist *p,*t;
p = L;
t = (Linklist *)malloc(sizeof(Linklist));
t->data = item;
if(L->next==NULL)
{
if(x==1)
{
L->next=t;
t->next=NULL;
return 1;
}
else
{
printf("操作失败!\n");
return 0;
}
}
while(p->next!=NULL&&i<x)
{
p = p->next;
i++;
}
if(p->next==NULL&&i<x)
{
printf("在%d位置处插入失败!\n",x);
return 0;
}
else
{
t->next = p->next;
p->next = t;
return 1;
}
}
//删除
int Delete(Linklist *L,int x)
{
int i = 1;
Linklist *p,*q;
p = L;
if(L->next==NULL)
{
printf("单链表为空!\n");
return 0;
}
while(p->next!=NULL&&i<x)
{
p = p->next;
i++;
}
if(p->next==NULL)
{
printf("没有第%d个结点!\n",x);
return 0;
}
else
{
q = p->next;
p->next = p->next->next;
free(q);
return 1;
}
}
//查找
int Seek(Linklist *L,ElemType x)
{
Linklist *p,*q,*r;
int i = 1;
if(L->next==NULL)
{
printf("单链表为空!\n");
return 0;
}
else
{
p = L->next;
while(p!=NULL)
{
if(p->data!=x)
{
i++;
p = p->next;
}
else break;
}
if(p==NULL)
{
printf("没有数值%d!\n",x);
return 0;
}
else return i;
}
}
//输出
void output(Linklist *L)
{
Linklist *p;
p = L->next;
printf("输出单链表;\n");
for(;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
printf("\n");
}
int main()
{
int n,i;
ElemType x,item;
Linklist *L;
printf("请输入单链表元素的个数:");
scanf("%d",&n);
L = CreateList(n);
output(L);
printf("插入的结点:");
scanf("%d",&x);
printf("插入的数值:");
scanf("%d",&item);
Insert(L,item,x);
output(L);
printf("删除的结点:");
scanf("%d",&x);
Delete(L,x);
output(L);
printf("查找的数值:");
scanf("%d",&x);
printf("%d的位置是: %d",x,Seek(L,x));
}