线性表的链式表示

上篇文章是线性表的顺序表示,本篇便是线性表的链式表示。

主函数的步骤包括,输入线性表数据,对链表的删除,插入。利用指针进行对链表的访问。

同时为了增加程序可读性,将结构体定义为LNode,*linklist。

#include<iostream>
//线性表的链式表示
using namespace std;
typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*linklist;//指向结构体的指针变量 
int initlist(linklist &l)//初始化链表 
{
	l=new LNode;//新的头节点 
	l->next=NULL;
	return 1;//成功初始化 
}
int getelem(linklist l,int i,int &e)//链表的取值 
{
	LNode *p;
	p=l->next;
	int j=1;
	while(p&&i<j)
	{
		p=p->next;
		j++;
	}
	if(!p||i>=j)  return 0;
	e=p->data;
	return 1;
}
int loateelem(linklist l,int e)//查找 
{
	linklist p;
	int i;
	p=l;
	while(p)
	{
		p=p->next;
		if (p->data==e)
		  return 1;
	}
	if(!p)
	 return 0;
}
int listinsert(linklist &l,int i,int e)//线性表的插入 
{
	linklist p,s;
	s=new LNode;
	int j=0;
	p=l;
	while(p&&j<(i-1))
	{
		p=p->next;
		j++;
	}
	if(!p||j>(i-1))  return 0;
	s->data=e;
	s->next=p->next;
	p->next=s;
	return 1;
}
int listdelet(linklist &l,int i)//链表的删除 
{
	linklist p,q;
	int j=0;
	p=l;
	while(p->next && j<(i-1))
	{
		p=p->next;
		j++;
	}
	if(!(p->next)||j>(i-1))  return 0;
	q=p->next;
	p->next=p->next->next;
	delete q;
	
	return 1;
}
void creatlist(linklist &l,int n)//创建链表 
{
	l=new LNode;
	linklist p;
	l->next=NULL;
	for(int i=0;i<n;i++)
	{
		p=new LNode;
		cin>>p->data;
		p->next=l->next;
		l->next=p;
	}

}
int main()
{
	linklist l,p;
	int n,i,j,k;
	cin>>n;
	initlist(l);//初始化链表 
	creatlist(l,n);//创建链表 
	p=l->next;//p指向首元节点 
	for(i=0;i<n;i++)
	{
		cout<<p->data<<" ";//输出节点的数据域 
		p=p->next;//p继续指向下一个节点 
	}
	cout<<endl<<"删除的数据:";//删除链表数据 
	cin>>k;
	if(listdelet(l,k)) 
	{
		cout<<"删除成功"<<endl;
		p=l->next;
		for(i=0;i<n-1;i++)
		{
			cout<<p->data<<" ";//输出节点的数据域 
			p=p->next;//p继续指向下一个节点 
		}
	}
	else cout<<"删除失败"<<endl;
	cout<<endl<<"输入插入的位置与数值:";//插入数据 
	cin>>j>>k;
	if(listinsert(l,j,k));
		{	
			cout<<"插入成功"<<endl;
			p=l->next;//p指向首元节点 
			for(i=0;i<n;i++)
			{
				cout<<p->data<<" ";//输出节点的数据域 
				p=p->next;//p继续指向下一个节点 
			}
		}
	if(!listinsert(l,j,k))	cout<<"插入失败"<<endl;
	return 0;	
}


线性表是一种常见的数据结构,它包含了一组有序的元素,元素之间具有前驱和后继关系。线性表链式表示是其中一种实现方线性表链式表示通过使用节点和指针表示中元素之间的关系。具体来说,每个节点中都包含了一个元素和一个指向下一个节点的指针。通过不断地遍历指针,就可以顺着链表找到中的所有元素。 链式表示的优点是可以动态地插入和删除元素,而不需要移动其他元素。这是因为链表中的节点通过指针相互连接,可以在任意位置插入和删除元素。同时,链式表示可以节省内存空间,因为节点不需要连续的存储空间,可以灵活地分配内存。 实现链式表示的方是使用结构体来定义节点和指针。节点结构体中包含了一个元素和一个指向下一个节点的指针。使用指针的方可以实现链表节点之间的相互连接。 在C语言中,可以通过定义一个节点结构体来表示链表的节点,然后使用指针指向链表的头节点。通过遍历指针,可以遍历整个链表,并对链表进行插入、删除等操作。 总之,线性表链式表示通过节点和指针的方来实现中元素之间的关系。链式表示可以动态地插入和删除元素,并且节省内存空间。在C语言中,可以通过定义节点结构体和指针来实现链式表示,实现链表的各种操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wangbowj123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值