数据结构二

数据结构二

  在数据结构一中,我们已经说过了线性表、栈等数据结构。已经对数据结构有了一些初步的了解,那么我们在这里在说一说关于队列和哈希表的用法。。

 

一、队列:

   1)定义:队列是另一种特殊的线性表,它和栈不同,它是允许在一段进行插入,在另一端进行删除的线性表。允许插入的一头称为队尾,通常用一个队尾指针tail指向队尾元素,即tail总是指向最后被插入的元素;允许删除的一端称为对首,通常也用一个对首指针head指向排头元素的前面。

   队列这种数据结构中,最先插入的元素将最先被删除;反之最后插入的元素将最后被删除;反之最后插入的元素将最后被删除。这也是队列与栈最本质的区别。因此队列又被称为“先进先出”的线性表。

 

2)种类

   i、顺序队列

     I、操作规则:先进先出,后进后出

     II、如何操作

       ①定义:int queue[N],head=0,tal=0;

        head指向队列首元素,tail指向队尾元素的右侧

       ②入队:inline void push(int a){queue[++tail]=a;}

      ③出队:inline int pop(){return wueue[front++];}

      ④对空的条件:inline bool empty(){return front>tail;}

      ⑤队列元素的个数 tail-head+1;

 

     ii:循环队列

III、经典例题:

     其实队列的经典例题有n多道,比如bfs也用到队列

   这里题目就不放了,具体题目也可以看《回忆BFS》中的题目

 

 

 

 

 

二、哈希(HASH)

通俗易懂的说,把关键字k放在f[k]的存储位置上,即h[f[k]]=d[k];万不得已时,最重要的是找到一个映射函数,将原来不适合作为下标的关键字转换为一个可作为下标的关键字:任何,是的s[k]=?可执行。

 

方法:除留余数法(对于大数字);变换转换法(对于字符串)等方法。

 

①除留余数法:对一些理论上要爆数组内存的巨大巨大的数进行求余操作,而对数进行求余操作的数一般也是一个较大的质数,例如107等。这样MAP较为保险。

 

②变化转化法:将一些数组不能存储的字符串进行按权值展开的操作,再将展开后得到的值存在数组中。这样也是比较保险的。

 

 

这个代码还是比较好实现的吧~那么在这里也就不贴了。

 

 

 

猜你喜欢

转载自blog.csdn.net/huang_ke_hai/article/details/79294222