打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
链表

单链表(静态数组实现方式)

原理,思想:

正常插入插入的值按顺序放入val数组当中

ne数组用来记录链表第k个数的下一位在val数组当中的位置。

h代表链表的头。初始值要定义成-1,才能不停地在ne数组中传递下去,代表链表终止的条件。

idx表示顺序插入数组的数字

删除链表中第k位的元素并非真实删除val中的数字,而是将ne[k-1]=ne[k]。这样链表就会绕过这个点,到下一个点。

代码:

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
typedef long long ll;
const int M=100000+10;
ll h=-1,val[M],ne[M],idx;


int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	ll m;
	cin>>m;
	memset(ne,-1,sizeof ne);
	while(m--)
	{
		char ch;
		ll k,x;
		cin>>ch;
		if (ch=='H') //添加头
		{
			cin>>x;
			ne[idx]=h;
			h=idx;
			val[idx++]=x;
		}
		else if (ch=='D')  //删除
		{
			cin>>k;
			if (k==0) //删除头
			{
				h=ne[h];
			}
			else   //删除的非头
				ne[k-1]=ne[ne[k-1]];
		}
		else  //插入元素到链表尾部
		{
			cin>>k>>x;
			val[idx]=x;
			ne[idx]=ne[k-1];
			ne[k-1]=idx++;
		}
	}
	for (ll i=h;i!=-1;i=ne[i])  //用ne来遍历输出链表
		cout<<val[i]<<' ';
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
六种主流编程语言(C、C++、Python、JavaScript、PHP、Java)特性对比
CF 1477A. Nezzar and Board
cin输入存入字符数组中
第十二届湖南省赛G - Parenthesis (树状数组维护)
or else的口语用法
最少零钱问题 最少硬币问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服