单链表的增删改查

#include<iostream>
#include<stdlib.h>
#include<string>
#include<list>
typedef int ElemType;
using namespace std;
//使用的引用的前提是看子函数力要不要改变主函数的变量,要改,就加。

//链表
//头指针:链表中第一个结点的存储位置,用来标识单链表(永不为空)
//头结点:在单链表第一个节点之前附加一个结点为方便操作
typedef struct LNode{ //单链表结点类型
	ElemType data;    //数据域
	struct LNode *next;//指针域
}LNode,*LinkList;
//头插法创建链表
LinkList GreatL(LinkList &L){
	LNode *q;
	int x;
	L=(LNode*)malloc(sizeof(LNode));
	cin>>x;
	while(x!=9999){
		q=(LNode*)malloc(sizeof(LNode));
		q->data=x;
		q->next=L->next;
		L->next=q;
		cin>>x;
	}
	return L;
}
//尾插法创建单链表
LinkList GreatL2(LinkList &L){
	int i;
	LNode *p,*q;
	L=(LNode*)malloc(sizeof(LNode));
	p=L;
	cin>>i;
	while(i!=9999){
		q=(LNode*)malloc(sizeof(LNode));
		q->data=i;
		p->next=q;
		p=q;
		cin>>i;
		
	}
	return L;
}
//链表查找:按值
LinkList Get2(LinkList L,ElemType e){
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
	}
	return p;
}
//链表查找:按序号
LinkList Get(LinkList L,int i){
	int j=1;
	LNode *p=L->next;
	if(i==0){
		return L;
	}
	if(i<1){
		return NULL;
	}
	while(p&&j<i){
		p=p->next;
		j++;
	}
	return p;


}
//在第i个位置插入数据
bool ListInt(LinkList L,int i,ElemType e){
	LinkList p=Get(L,i-1);
	if(p==NULL){
		return false;
	}
	LinkList s=(LinkList)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;

}
//安位置删除结点
bool ListD(LinkList L,int i){
	LinkList p=Get(L,i-1);
	if(p==NULL){
		return false;
	}
	p->next=p->next->next;
	
}


//打印链表
int PrintList(LinkList L){//不加引用改变不了L的值
	L=L->next;
	while(L!=NULL){
		cout<<L->data<<"\t";
		L=L->next;
	}
	return 0;
}
int main(){
	LinkList L;//头
//	LinkList sear,loca;//用来存储某一个结点
//	GreatL(L);
	GreatL2(L);
//	sear=Get(L,3);
//	if(sear!=NULL){
//		cout<<"查找成功"<<endl;
//		cout<<sear->data<<endl;
//	}else{
//		cout<<"查找失败"<<endl;
//	}
//	loca=Get2(L,45);
//	if(loca!=NULL){
//		cout<<"查找成功"<<endl;
//		cout<<loca->data<<endl;
//	}else{
//		cout<<"查找失败"<<endl;
//	}
	
//	ListInt(L,3,20);
	ListD(L,4);
	PrintList(L);
}

不能同时运行会由冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值