数据结构链表操作

#include<iostream>
using namespace std;
typedef float Elemtype;
typedef struct Lnode{
	Elemtype data;
	struct Lnode *next;
}Lnode,*LinkList;
//初始化链表
void InitList_L(LinkList &L){
	L=new Lnode;
	L->next=NULL;
	cout<<"初始化成功"<<endl;
}
//判断链表是否为空
void ListEmpty(LinkList &L){
	if(L->next)cout<<"链表不为空"<<endl;
	else cout<<"链表为空"<<endl;
}
//销毁链表,链表销毁后不存在
void DestroyList_L(LinkList &L){
	LinkList p;
	while(L){
	p=L;
	L=L->next;
	delete p;
}
	cout<<"销毁成功"<<endl;
}
//清空链表,链表依旧存在,但链表中无元素
void ClearList(LinkList &L){
	LinkList p,q;
	p=L->next;
	while(p){
		q=p->next;
		delete p;
		p=q;
	}
	L->next=NULL;	
    cout<<"清空成功"<<endl;
}
//求单链表表长
void ListLength_L(LinkList L){
	LinkList p;
	p=L->next;
	int n=0;
	while(p){
		n++;
		p=p->next;
		
	}
	cout<<"单链表表长为:"<<n<<endl;
}
//单链表的建立(头插法)
void CreateList_H(LinkList &L){
	L=new Lnode;
	LinkList p;
	L->next=NULL;
	int n;
	cout<<"输入要插入的元素个数"<<endl;
	cin>>n;
	for(int i=0;i<n;i++){
		p=new Lnode;
		cout<<"输入插入元素的的元素值"<<endl;
		cin>>p->data;
		p->next=L->next;
		L->next=p;
	}
}
//单链表的建立(尾插法)
void CreateList_R(LinkList &L){
	L=new Lnode;
	L->next=NULL;
	LinkList r,p;
	r=L;
	int n;
	cout<<"输入要插入的元素个数"<<endl;
	cin>>n;
	for(int i=0;i<n;i++){
		p=new Lnode;
		cout<<"输入插入元素的的元素值"<<endl;
		cin>>p->data;
		p->next=NULL;
		r->next=p;
		r=p;
	}
}
//遍历链表
void PrintElem(LinkList &L){
	LinkList p;
	p=L->next;
	while(p){
		cout<<p->data<<"  ";
		p=p->next;
	}
	cout<<endl;
}
//查找指定位置的元素
void GetElem_L(LinkList &L){
	LinkList p;
	int i;
	int e;
	p=L->next;
	cout<<"请输入要查找的元素位置:";
	cin>>i;
	for(int j=1;j<i;j++){
		p=p->next;
	}
	cout<<"该元素值为: "<<p->data<<endl;
}	
//查找指定元素值的元素
void LocateElem(LinkList &L){
	LinkList p;
	p=L->next;
	int e,i;
	i=1;
	cout<<"请输入查找元素位置的元素值:";
	cin>>e;
	while(p){
		if(p->data=e) cout<<"该元素的元素位置为:"<<i<<endl;
		else p=p->next;
	}
}
//在指定位置插入元素
void ListAdd(LinkList &L){
	int i,e;
	cout<<"请输入想要插入的元素的位置"<<endl;
	cin>>i;
	cout<<"请输入元素值: ";
	cin>>e;
	LinkList p,s;
	p=L;
	for(int j=1;j<i;j++){
		p=p->next;
	}
	s=new Lnode;
	s->data=e;
	s->next=p->next;
	p->next=s;
}
//在指定位置删除元素
void ListDelete(LinkList &L){
	int i;
	cout<<"请输入想要删除的元素的位置"<<endl;
	cin>>i;
	LinkList p,q;
	p=L;
	for(int j=1;j<i;j++){
		p=p->next;
	}
	q=p->next;
	p->next=q->next;
	delete q;
}
int main(){
	LinkList L;
	int a;	
	while(true){
	cout<<"--------------链表操作-------------------"<<endl;
	cout<<"初始化链表------------------------------1"<<endl;
	cout<<"销毁链表--------------------------------2"<<endl;
	cout<<"判断链表长度----------------------------3"<<endl;
	cout<<"判断链表是否为空------------------------4"<<endl;
	cout<<"清空链表--------------------------------5"<<endl;
	cout<<"链表中插入元素(头插法)------------------6"<<endl;
	cout<<"链表中插入元素(尾插法)------------------7"<<endl;
	cout<<"遍历链表--------------------------------8"<<endl;
	cout<<"插入链表中指定位置元素------------------9"<<endl;
	cout<<"遍历链表--------------------------------10"<<endl;
	cout<<"查找指定位置的元素值--------------------11"<<endl;
	cout<<"查找指定值的元素位置--------------------12"<<endl;
	cout<<"在指定位置删除元素----------------------13"<<endl;
	cout<<"请输入操作数"<<endl;
	cin>>a;
	switch(a){
		case 1:
		InitList_L(L);
		break;
		case 2:
		DestroyList_L(L);
		break;
		case 3:
		ListLength_L(L);
		break;
		case 4:
		ListEmpty(L);
		break;
		case 5:
		ClearList(L);
		break;
		case 6:
		CreateList_H(L);
		break;
		case 7:
		CreateList_R(L);
		break;
		case 8:
		PrintElem(L);
		break;
		case 9:
		ListAdd(L);
		break;
		case 10:
		PrintElem(L);
		break;
		case 11:
		GetElem_L(L);
		break;
		case 12:
		LocateElem(L);
		break;
		case 13:
		ListDelete(L);
		break;
		
	}
}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值