【数据结构(C++)】单链表基本操作(初始化、销毁、建立、删除、修改等)

本文介绍了如何使用C++定义链表数据结构,并实现链表的初始化、销毁、尾插法创建、头插法创建、插入、删除以及修改等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<bits/stdc++.h>
using namespace std;

/*定义结点数据结构 typedef定义了一个结构体类型LNode,
它包含一个整型成员data和一个指向LNode结构体类型的指针成员next。
然后通过typedef关键字定义了LNode类型的别名LinkList,
这个别名表示指向LNode结构体类型的指针。*/
typedef struct LNode{
	int data; //数据域 
	struct LNode *next;//指针域 
}LNode,*LinkList;

//初始化 
int InitLinkList(LinkList &head){
	head=new LNode;
	if(head==NULL){
		return -1;
	}
	head->next=NULL;
	return 0;
}

//销毁 
void DestoryLinkList(LinkList &head){
	head->next=NULL;
} 

//尾插法 ,插入顺序和输出顺序是一样的;这里通过自定义的数组来建立单链表,也可以改成直接输入建立; 
void CreatLinkListRear(LinkList &head,int A[],int n){
	LinkList rear=head;
	for(int i=0;i<n;i++){
		LinkList p=new LNode;
		p->data=A[i];
		rear->next=p;
		rear=p;
		rear->next=NULL;
	}
}

//头插法,倒序; 
 void CreatLinkListFront(LinkList &head,int A[],int n){
	for(int i=0;i<n;i++){
		LinkList p=new LNode;
		p->data=A[i];
		p->next=head->next;
		head->next=p;
	}
}

//插入,使用后插法.
/*前插法类似, 利用尾插法就可以实现逻辑上的前插法 
例如:要在第5个位置插入e,就需要找到第5个结点,在第5个节点,后面插入一个值为e的结点,
再交换第5个结点和它后面一个结点的data值就可以了*/
void LinkListInsert(LinkList &head,int n,int e){
	LinkList p=new LNode;
	p->data=e;
	LinkList q=head;
	for(int i=1;i<n;i++){
		q=q->next;
	}
	p->next=q->next;
	q->next=p;
}


//删除 ,删除第n个元素 
void LinkListDelete(LinkList &head,int n){
	LinkList p=head;
	LinkList q;
	for(int i=1;i<n;i++){
		p=p->next;
	}
	q=p->next;
	delete q;
	p->next=p->next->next;
}

//删除,删除第n个元素并返回其值; 
int LinkListDeletePlus(LinkList &head,int n){
	LinkList p=head;
	for(int i=1;i<n;i++){
		p=p->next;
	}
	LinkList q=p->next;
	p->next=p->next->next;
	int temp=q->data;
	delete q;
	return temp;
}

//修改, 修改第n个结点的值为e ;查找操作和修改类似,只是查找找到了没有修改,而是直接返回 
void LinkListChange(LinkList &head,int n,int e){
	LinkList p=head;
	for(int i=1;i<=n;i++){
		p=p->next;
	}
	p->data=e;
}

//主函数主要用于打印结果用,写的很乱,仅供参考 
int main(){
	int A[10]={1,2,3,4,5,6,7,8,9,10};
	LinkList head;
	InitLinkList(head);
	CreatLinkListRear(head,A,10);//尾插法使用 
	//CreatLinkListFront(head,A,10)头插法使用 
	LinkList q1=head->next;
	LinkList q2=head->next;
	LinkList q3=head->next;
	LinkList q4=head->next;
	//输出结果验证一下 
	cout<<"尾插法:"; 
	for(int i=0;i<10;i++){
		cout<<q1->data;
		q1=q1->next;
	}
	cout<<endl<<"在第5个位置插入0:";
	LinkListInsert(head,5,0);
	for(int i=0;i<11;i++){
		cout<<q2->data;
		q2=q2->next;
	}
	cout<<endl<<"删除第5个位置的结点并返回删除的值:";
	cout<<LinkListDeletePlus(head,5)<<endl<<"链表为:";
	for(int i=0;i<10;i++){
		cout<<q3->data;
		q3=q3->next;
	}
	cout<<endl<<"第5个位置的结点值改为99:";
	LinkListChange(head,5,99);
	for(int i=0;i<10;i++){
		cout<<q4->data;
		q4=q4->next;
	}
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值