数据结构之单链表的运用(C语言)

#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;	
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值