码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构录 之 链表&栈&队列

时间:2015-10-18 21:20:59      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

  三种基本的数据结构,来稍微说一下。

  首先链表,这个几乎每本C++的语言书都会说的,直接看书上说的就好。

  链表就是一个链,每一个都有一个指针指向下一个,然后这样串了起来。然后可以从头开始找,一直找到尾巴。然后对于某个数据点,都可以删除,只需要让他前面那个指向他后面那个,这样从头开始找的时候就找不到这个点了。。。在这个点之后添加一个点也是这样,直接让这个点指向那个新的,然后让新的指向原来这个点指向的后一个。。。

  可以想象就是一个个点,然后第一个指向第二个,第二个指向第三个。。。就像是一条长长的链一样。。。

  然后说一下实现的方法,一般C++的书上的实现方法是弄一个结点类,然后里面包含一个指针,表示指向下一个点,然后通过new和delete去搞。。。这种具体的实现方法建议看看书上的就行,这里不多说了这种。

  因为链表用到的地方实在不多,也就不多说了。

  但是他也是可以很灵活的,比如说在增加一个指针指向前面,这样就能向前找了。再比如形成一个网状的链表,每个点四个指针指向上下左右,这个东西叫做Dance Link()

 

  然后是队列。

  队列就是像真的队列一样,谁先来谁先买菜。先进先出,First in,First out。

  然后应用到了计算机领域就是往一个东西里面赛东西,也拿东西。然后拿到的只能是最先塞进去的那个。

  然后使用的话有一个STL里面的队列,queue,这个可以自行百度去学习。一般来说使用这个就够了,但是对于ACM来说,如果还想要速度更快的话,就开一个足够大的数组,然后模拟一个,代码如下:

int que[100010];
int first,last;

void init()
{
    first=last=0;
}

void push(int x)
{
    que[last++]=x;
}

int pop()
{
    if(last>first) return que[first++];
    else return 0;
}

  que数组用来存数据,first表示开头那个的位置,last表示最后那个后面一个位置。

  这样的话 last<=first 的时候就表示队列是空的了。

  pop函数就是取队列的第一个元素,push就是往队列里面仍东西。

  这里还要注意init,需要初始化才能使用。

 

  队列的用处比较大,BFS就是典型的应用(BFS在另一篇有说。)。

  然后队列的升级版比如 优先队列,单调队列,都是很有用的数据结构,之后也会学习到。

 

  然后就是栈:

  栈的话和队列正好相反,队列是先进去的先出来,栈的话是先进去的最后出来,最后一个进去的先出来,First in,Last out。

  就好像是一个箱子,往里面一本本的放书,然后最先放的在最下面,需要他上面所有的拿出来才能拿这本。

  然后STL里面也有 stack 来用。

  也说一下对于ACM来说,如果是自己实现的话,也是开一个足够大的数组。

int stack[100010];
int top;

void init()
{
    top=0;
}

void push(int x)
{
    stack[top++]=x;
}

int pop()
{
    if(top) return stack[--top];
    else return 0;
}

  各个函数的意义同上,top表示最上面那个元素之后一个的位置,所有top=0表示里面是空的。

 

  栈的话用的也很多,其实函数的递归调用就是编译器通过栈来实现的,操作系统里面也有很多地方用到了栈。DFS也可以自己通过栈来实现。

  然后栈的升级版单调栈也是很常用的数据结构。

 

  差不多就这些。但是只是这样单纯的说的话其实理解不深,建议大家最好跟着练习题去做。也就是在 http://acm.hust.edu.cn/vjudge/toIndex.action 这个网站的contest里面搜索SCUT SE 就能找到,有关栈的练习应该是第三场新生训练赛。

数据结构录 之 链表&栈&队列

标签:

原文地址:http://www.cnblogs.com/whywhy/p/4890231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!