单链表
本文最后更新于-1天前,其中的信息可能已经过时,如有错误请发送邮件到2392862431@qq.com

本质:

本质上就是用数组模拟动态链表,也就是说这是静态链表,静态模拟链表速度快。

基本原理:

就是利用数组来模拟整个过程,如在头节点插入数据,删除数据,在任意结点插入数据……每个结点有一个值e[i],有一个指针ne[i],

head指的是头节点的下标,idx表示当前用到了第几个结点,这个结点是可用的。

实现功能:

1、在头节点处插入一个结点

void add_to_head(int k)
{
     e[idx]=k;
     ne[k]=head;
     head=idx++;
}

2、在其他位置插入一个新结点

void insert(int k,int c)
{
    e[idx]=c;
    ne[idx]=ne[k];
    ne[k]=idx++;
}

3、删除结点

void remove(int k)
{
  ne[k]=ne[ne[k]];
}

代码实现:

#include <iostream>
using namespace std;
const int N=100010;
int e[N],ne[N],head,idx,n;

void init()
{
   head=-1;
   idx=0;
}
void add_to_head(int x)
{
   e[idx]=x;
   ne[idx]=head;
   head=idx++;
}

void remove(int k)
{
   ne[k]=ne[ne[k]];
   
}

void insert(int k,int x)
{
   e[idx]=x;
   ne[idx]=ne[k];
   ne[k]=idx++;
}
int main()
{
   init();
   scanf("%d",&n);
   while(n--)
  {
       int k,x;
       char c;
       cin>>c;
       if(c=='H')
      {
           scanf("%d",&x);
           add_to_head(x);
      }
       else if(c=='D')
      {
           scanf("%d",&k);
           if(!k)
           head=ne[head];
           else
           remove(k-1);
   
      }
      else
      {
          scanf("%d%d",&k,&x);
          insert(k-1,x);
      }
     
  }
   for(int i=head;i!=-1;i=ne[i])
  {
       printf("%d ",e[i]);
  }
   return 0;
   
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇