栈和列表的区别

来源:互联网 发布:巫师2优化 编辑:程序博客网 时间:2024/05/21 09:08
栈的头文件如下:


#define MAXSIZE 100


typedef int datatype;


typedef struct{


 datatype a[MAXSIZE];


 int top;


}sequence_stack;


由此可以看出,栈在开始就指定了长度,申请好了内存空间。栈,作为线性存储的重要手段,其最大的特点是存储上逻辑结构和物理结构相同。


 


链表的头文件如下:


typedef int datatype;


typedef struct link_note{


 datatype info;


 struct link_note *next;


}note;


相对于栈,链表在存储上逻辑结构相邻的节点,物理结构并不相同,而且是动态的申请(释放)内存。


 


从以上分析看来貌似是两者各有优劣。仔细分析我们发现,链表的优势更为明显!


首先,链表支持动态的增加节点,而栈只能从用 从一开始 就申请的那么多节点(如演示头文件的MAXSIZE)。由于栈在逻辑和物理上的结构 统一,貌似可以提高插入或者删除的性能(减少cpu,内存的负担),但细心分析你会发现——这时候系统会不断的进行赋值操作,反而增加了硬件的负担。而链表只进行那么屈指可数的几步就可以完成所有的操作。


 


以上只是一些粗略的分析,下面我们进行详细 分析!


栈,最大的特点就是进栈出栈操作,由此 可以 进行一些特殊操作(括号匹配,算术表达式求值等)这些事链表不能取代的!


队列可以说是栈的简单变形,其性能的优越性真正体现还是在顺序循环 队列上。如果用顺序循环 队列设计的小系统可以很方便的执行进栈出栈操作,而且能保持物理和 逻辑模型的 统一。


 


链表的高性能主要还是在双向链表,我们甚至可以使用二分法 来遍历整个链表,这个将是对 系统性能翻倍的提高!


但是,因为指针也是数据类型的一种,也就意味着它要占用内存空间。另外它不断的操作物理位置不相邻的指针, 这样就对内存的寻址要求较高。换句话说 :内存频率越高 ,颗粒越好,链表的执行效率越高。


 



0 0
原创粉丝点击