《数据结构》线性表之单链表 双向链表

这篇博客详细介绍了单链表和双向链表的初始化、创建、获取元素、定位、插入和删除等基本操作。通过示例代码展示了如何在C++中实现这些操作,并提供了测试用例进行展示。内容涵盖了链表数据结构的基础知识和实际应用。
摘要由CSDN通过智能技术生成

单链表的几个基本操作

#include <iostream>
using namespace std;
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;
bool Init(LinkList &L)
{
	L= new LNode;
	L->next = NULL;
	return true;
 } 
 void CreateList(LinkList L,int n)
 {//前插法
    int i;
    LNode *p=NULL;
    for(i=0;i<n;i++)
    {
    	p=new LNode;
    	cin>>p->data;
    	p->next=L->next;
    	L->next=p;
	}
	/*
	LNode *r = NULL;
	r=L;
	for(i=0;i<n;i++)
	{
	p=new LNode;
	cin>>p->data;
	p->next = NULL;
	r->next = p;
	r=p;
    }
	*/
 	
 }
 bool Getelem(LinkList L,int i,int &e)
 {
 	int j=1;
 	LNode *p=NULL;
 	p=L->next;
 	while(p&&j<i)
 	{
 		p=p->next;
 		j++;
	 }
	if(!p||j>i)
	   return false;
	e=p->data;
	return true;
 }
LNode *Locate(LinkList L,int e)
{
	LNode *p=NULL;
	p=L->next;
	while(p&&p->data!=e)
	{
		p=p->next;
	}
	return p;
}
bool ListInsert(LinkList &L,int i,int e)
{
	LNode *p=NULL, *s=NULL;
	p=L;
	int j=0;
	while(p && j<i-1)
	{
		p=p->next;
		j++;
	}
	if(!p||j>i-1)
	  return false;
	s = new LNode;
	s->data=e;
	s->next = p->next;
	p->next = s;
	return true;
}
bool ListDelete(LinkList &L,int i)
{
	LNode *p=NULL,*q=NULL;
	int j=0;
	p=L;
	while(p->next && j<i-1)
	{
		p=p->next;
		j++;
	}
	if(!(p->next)||(j>i-1))
		return false;
	q=p->next;
	p->next=q->next;
	delete q;
	return true;
}
void display(LinkList L)
{
	LNode *p;
	p=L->next;
	while(p)
	{
		cout<<p->data;
		p=p->next;
	}
	cout<<endl;
}
int main()
{
	int n,e;
	LNode *p=NULL;
	cout<<"个数"; 
	cin>>n;
	LinkList L;
	Init(L);
	CreateList(L,n);
	display(L);
	p=Locate(L,n-1);
	cout<<p;
	Getelem(L,n-1,e);
	ListInsert(L,n-1,e);
	display(L);
	ListDelete(L,n-1);
	display(L);
	return 0;
}

双向链表的几个操作

bool ListInsert(LinkList &L,int i,int e)
{
	LNode *s=NULL,*p=NULL;
	if(!(p=Getelem(L,i)))//Getelem参照前代码
	   return false;
	s = new LNode;
	s->data = e;
	s->prior = p->prior;
	p->prior->next = s;
	s->next = p;
	p->prior = s;
	return true;
}
bool ListDelete(LinkList &L,int i)
{
	LNode *p=NULL;
	if(!(p=Getelem(L,i)))//Getelem参照前代码
	   return false;
	p->prior->next=p->next;
	p->next->prior=p->prior;
	return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江水西流...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值