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

基本数据结构理解

时间:2017-10-29 18:45:50      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:出栈   src   head   题目   turn   维护   png   cout   return   

基本的数据结构小结,用数组代替指针

 

链表

  技术分享

链表和数组最大的不同是拥有 next值 并且各点在内存中彼此分散与内存的物理顺序无关。如果为a[5]={1,2,3,4,5};这时候每个值是按照顺序的排列 。

如果是a[5]={1,2,3,5,4};按照下标输出则是 1 2 3 5 4,此时用链表存储,a[4](值为4)的next标记为3,则输出a[a[4].next]的值就是5,而数组中值的位置都没有变化,给每个值都存储下一个值,可以按序输出。

静态链表

struct node
{
int value;
intnext;
}arr[MAX];
int top;//链表顶端
//插入
top++;
arr[top].value=q;
arr[top].next=arr[p].next;
arr[p].next=top;
//删除
int temp=a[p].next;
a[p].next=a[temp].next;
//查找.遍历
int temp=head;
while(temp)
{
cout<<a[temp].value;
temp=a[temp].next;
}

链表还有一种叫做双向链表,比刚才静态(单)链表多了一个前驱(prev)。这样不管是插入还是删除,都需要维护好三个关系, 这个数的本值,前驱,后继。并且双向链表的查找或遍历是可以从两个方向开始的。当向一个链表中插入数据的时候,不需要再数组中位置紧密排列,而记住前驱后继的序号即可,这种方法比腾出一位数组要方便的多。

循环链表,最后一个值的next和第一个值相同,第一个值的prev和最后一个值相同,构成了一个环。

技术分享

 

    栈的存储特性:先进后出,先出后进。top表示栈顶,也就是每次数据进、出栈的时候top都会改变,top也表示一个栈中数据的多少。

技术分享技术分享

 

int stack[N],top=0;

inline void push(int a){stack[++top]=a;}//入栈

技术分享

 

intline int pop(){return stack[--top];}//出栈

技术分享

 

inline bool empty(){return top<1;}//栈空

 

一般存储栈的题目会考察单调栈,单调栈中元素的值是按照升序或者降序排列的,所以在存入的时候会和stack[top]的值比较。例如 stack[5]={1,2,5,6},此时存入的top=3,stack[top]的值是6,如果把3存入,则需要删除值5和6,通过比较的出5、6比3大,top--(连续两次),此时top为1,然后存入stack[top++]的值是3

基本数据结构理解

标签:出栈   src   head   题目   turn   维护   png   cout   return   

原文地址:http://www.cnblogs.com/Murs/p/7750460.html

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