数组模拟链表集合

本文探讨了如何利用数组来模拟链表,包括初始化过程和各种操作,如在末尾插入、特定位置插入和删除元素,同时保持链表排序。还提到了数组模拟双向链表的概念。
摘要由CSDN通过智能技术生成

数组模拟链表 value[]数组存储数值 r[]数组存储链表数与数之间的位置关系

数组模拟链表初始化

#include<iostream>
using namespace std;
int value[101],r[101];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>value[i];
for(int i=1;i<=n;i++)
{
if(i!=n) r[i]=i+1;
else r[i]=0;
}
int t=1;
for(int i=1;i<=n;i++)
cout<<value[i]<< " ";
cout<<endl;
for(int i=1;i<=n;i++)
cout<<r[i]<< " ";
}

输入
6
10 9 8 6 5 4 2
输出
10 9 8 6 5 4
2 3 4 5 6 0 //0代表链表尾

1.在末尾插入值
2.在具体位置插入值
3.在具体位置删除值
4.在链表中插入任意值,链表的排序顺序不变
5.输出链表

此处下标以1开始的,可以具体问题具体对待

#include<iostream>
using namespace std;
int value[101],nt[101],len,nxt; 
//在链表末尾中插入一个值
void init()
{
	 for(int i=1;i<=len;i++)
	  cin>>value[i];
	  for(int i=1;i<=len;i++)
	  {
	  	if(i!=len) nt[i]=i+1;
	  	else nt[i]=0;	  
	  }
}
void insertend(int x)
{
	len++;
	value[len]=x;
	nt[len-1]=len;
	nt[len]=0;
 } 

 //在链表某个位置插入值具体问题具体分析 
 void insertmid(int x,int p)
 {
 	len++;
	value[len]=x;
 	value[len] =x;
 	nt[len]=nt[p-1];
 	nt[p-1]=len;
 }
 //删除某个位置的值
 void del(int p)
 {
 	nt[p-1]=nt[p];
  } 
//插入一个值,当前链表的排列顺序不变,比如当前从小到大
void insertrule(int x)
{
	len++;
	value[len]=x;
	int t=1;
	while(t)
	{
		if(value[t]>value[len])
		{
			nt[len]=nt[t-1];
			nt[t-1]=len;
			break;
		}
		t=nt[t];
	}
 } 
 void print()
 {
    int t=1;
	  while(t)
	  {
	  	cout<<value[t]<<" ";
	  	t=nt[t];
	  }	
	  cout<<endl;
 }
int main()
{
	cin>>len;
	init();
	print();
	insertend(10);
	print();
	insertmid(19,3);
	print();
	del(3);
	print();
	insertrule(8);
	print();
	
	  
 return 0;
}

输入
9
1 2 3 4 5 6 8 9 19

输出

1 2 3 4 5 6 8 9 19
1 2 3 4 5 6 8 9 19 10
1 2 19 3 4 5 6 8 9 19 10
1 2 4 5 6 8 9 19 10
1 2 4 5 6 8 8 9 19 10

数组模拟双向链表

双向链表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值