#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList Create_head();//链表头结点创建
void Create_List(LinkList &L,int);//链表创建
void Print_List(LinkList &L);//显示链表元素
void Insert_List(LinkList &L,int,int);//插入元素
void Delete_List(LinkList &L,int);//删除元素
int Search_List(LinkList L,int,int);//查找元素
void Show_Menu()
{
printf("*********功能项**********\n");
printf("****1.创建链表头结点*****\n");
printf("*****2.显示链表元素******\n");
printf("*******3.插入元素********\n");
printf("*******4.删除元素********\n");
printf("*******5.查找元素********\n");
printf("*******6.退出程序********\n");
printf("*************************\n");
}
LinkList Create_head()
{
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
p->next=NULL;
return p;
}
void Create_List(LinkList &L,int n)
{
LinkList p,q;
int i;
p=L;
printf("please input data:");
for(i=1;i<=n;i++)
{
q=(LinkList)malloc(sizeof(LNode));
// printf("please input data:");
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
}
void Print_List(LinkList &L)
{
LinkList p;
p=L->next;
if(p==NULL)
printf("空无一物!\n");
else
{
printf("链表中的元素为:");
for(p=L->next;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
printf("\n");
}}
void Insert_List(LinkList &L,int i,int e)
{
int j=0;
LinkList p,s;
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL||j>i-1)
{
printf("插入点位置错误!\n");
exit(0);
}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
printf("插入成功!\n");
Print_List(L);
}
void Delete_List(LinkList &L,int i)
{
LinkList p,q;
int j=0;
int x,e;
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL||j>i-1)
{
printf("删除位置错误!\n");
exit(0);
}
q=p->next;
p->next=q->next;
e=q->data;
free(q);
printf("删除成功!\n");
Print_List(L);
}
int Search_List(LinkList L,int i,int e)
{
LinkList p;
p=L->next;
int j=1;//计数器
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
{
printf("未找到!\n");
return 0;
}
e=p->data;
printf("该位置的元素为:%d\n",e);
return 1;
}
int main()
{
LinkList L,p;
int i,e,n;
L=Create_head();
int select;
while(1)
{
Show_Menu();
printf("请选择:");
scanf("%d",&select);
switch(select)
{
case 1:
printf("请输入链表节点个数:");
scanf("%d",&n);
Create_List(L,n);
break;
case 2:
Print_List(L);
break;
case 3:
printf("输入要插入的元素值:");
scanf("%d",&e);
printf("输入要插入的位置:");
scanf("%d",&i);
Insert_List(L,i,e);
break;
case 4:
printf("输入要删除的元素位置:");
scanf("%d",&i);
Delete_List(L,i);
break;
case 5:
printf("输入要查找的元素位置:");
scanf("%d",&i);
Search_List(L,i,e);
break;
case 6:
system("pause");
return 0;
default:
printf("请重新输入!\n");
break;
}
}
return 0;
}
数据结构之单链表的运用(C语言)
于 2022-03-30 09:42:04 首次发布