IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 单链表+双链表(邻接表)+模拟栈 -> 正文阅读

[数据结构与算法]单链表+双链表(邻接表)+模拟栈

AcWing 826. 单链表

#include<iostream>

using namespace std;

const int N = 100010;

int head,idx,e[N],ne[N];
//初始化 
void init()
{
	head = -1;
	idx = 0;
}
//删除 
void del(int k)
{
	ne[k] = ne[ne[k]];
}
//头插
void add_head(int x)
{
	e[idx] = x;
	ne[idx] = head;
	head = idx++;	
} 
//正常插入
void add(int k,int x)
{
	e[idx] = x;
	ne[idx] = ne[k];
	ne[k] = idx++;	
} 

int main()
{
	int n;cin >> n;
	init();
	while(n--)
	{
		int x,k;
		char ch;cin >> ch;
		if(ch == 'H')
		{
			cin >> x;
			add_head(x);
		}
		else if(ch == 'D')
		{
			cin >> k;
			if(!k) head = ne[head]; 
			del(k - 1);//对第k - 1位进行操作,删除第k - 1位右边的数 
		} 
		else if(ch == 'I')
		{
			cin >> k >> x;
			add(k - 1,x);//在第k - 1位右边插入,插入到第k个位置
		}
	}
	for(int i = head;i != -1;i = ne[i]) cout << e[i] << ' ';//遍历整个链表
	cout << endl;
	return 0;
}

AcWing 827. 双链表

#include<iostream>

using namespace std;

const int N = 100010;

int n,x,k,e[N],l[N],r[N],idx;

void init()
{
    r[0] = 1,l[1] = 0,idx = 2;
}

void add(int k,int x)
{
    e[idx] = x;//赋值
    r[idx] = r[k];//当前单元的右侧链接第k个节点右侧指向的节点(即k+1个节点)
    l[idx] = k;//当前单元左侧链接第k个节点
    l[r[k]] = idx;//第k个节点右侧节点的左侧链接标号为idx的单元
    r[k] = idx++;//不能与上一步反了,改变第k个节点右侧链接到标号为idx的单元
}

void del(int k)
{
    l[r[k]] = l[k];//该节点右侧节点的左指针指向该节点左侧节点
    r[l[k]] = r[k];//该节点左侧节点的右指针指向该节点右侧节点
}
int main()
{
    cin >> n;
    init();
    while(n -- )
    {
        string a;cin >> a;
        if(a == "L")
        {
            cin >> x;
            add(0,x);
        }
        else if(a == "R")
        {
            cin >> x;
            add(l[1],x);
        }
        else if(a == "IL")//插入到第k个节点的左侧
        {
            cin >> k >> x;
            add(l[k + 1],x);//l[k+1]代表第k个节点左侧的节点,转化成为在第k-1个节点的右侧插入
        }
        else if(a == "IR")
        {
            cin >> k >> x;
            add(k + 1,x);
        }
        else
        {
            cin >> k;
            del(k + 1);
        }
    }
    for(int i = r[0];i != 1;i = r[i]) cout << e[i] << ' ';
    cout << endl;
    return 0;
}

AcWing 828. 模拟栈

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 100010;

int x, m, stk[N], tt;

int main()
{
	cin >> m;
	while (m--)
	{
		string a; cin >> a;
		if (a == "push")
		{
			cin >> x;
			stk[++tt] = x;
		}
		else if (a == "pop")
		{
			tt--;
		}
		else if (a == "empty")
		{
			if (!tt) puts("YES");
			else puts("NO");
		}
		else if (a == "query")
		{
			cout << stk[tt] << endl;
		}
	}
	return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 23:11:46  更:2021-08-10 23:11:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:56:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码