【数据结构总结】堆栈
来源:互联网 发布:环保工作有哪些 知乎 编辑:程序博客网 时间:2024/05/16 19:23
问题:用链表或者数组来实现一个堆栈,要求,易用,规范,并具有完备的接口。
堆栈的适用任务:
保证子历程中返回地址、参数和局部变量(这一点的作用域递归函数可谓异曲同工,实际上,递归函数就是堆栈数据结构的另一种形式)
编译器解析语法时,保存各种语法的元素记号(如果分析一个程序段的时候,一个主程序中反复调用若干子程序,分析的时候,这些函数或者自变量都是在堆栈中的)
选用链表这种形式的话,栈顶指针一定是在链表头的位置,这样才能方便删除和插入!
堆栈的接口:
pop、push、create和delete
参数分析:
pop是出栈,参数需要有一个指向堆栈的指针并有一个返回值。
push是入栈,参数需要一个指向堆栈的指针和一个需要入栈的参数的值。
create,其实就是创建一个空栈,参数需要一个栈顶指针。
delete,将栈顶指针置为空,参数需要一个栈顶指针。
接口的完备规范,往往是函数具有相同的形式的返回值或者参数传递形式。
int pop(element **stack, void **data);——“**”,是因为C中不支持传地址,所以就利用指针的指针在子函数中修改父函数的值。pop函数中,原堆栈的栈顶指针stack因为出栈发生了变化,故要用“**”,数据指针也具有相同的原因。
int push(element **stack, void *data);
int createStack(element **stack);
int deleteStack(element **stack);
接口的代码实现:
int push(element **stack, void *data){
if(!*stack)
ruturn 0;
element *elen=(element *)malloc(element);
if(!elen)
return 0;
elen->data=data;
elen->next=*stack;
*stack=elen;
return 1;
}
int pop(element **stack, void **data)
{
if(!*stack)
return 0;
element* elen=(element *)malloc(sizeof(element));
*data=*stack->data;
elen=*stack;
*stack=*stack->next;
free(elen);
return 1;
}
int createStack(element **stack)
{
if(*stack)
return 0;
*stack=(element*)malloc(sizeof(element));
*stack=NULL;
return 1;
)
int deleteStack(elelment **stack)
{
if(!*stack)
return;
element *elen=(element *)malloc(sizeof(element));
while(*stack)
{
elen=*stack;
*stack=*stack->next;
free(elen);
}
return 1;
}
- 【数据结构总结】堆栈
- 《数据结构学习总结》--表,队列,堆栈
- 数据结构:堆栈
- 数据结构--堆栈
- 数据结构--堆栈
- 数据结构-堆栈
- 数据结构 堆栈
- 堆栈和队列的数据结构和相关操作总结
- 内存堆栈和数据结构堆栈
- 内存堆栈和数据结构堆栈
- Java基础课程学习总结,使用LinkedList简单模拟队列数据结构和堆栈数据结构的实现
- 堆栈数据结构 stack.h
- C#数据结构篇(堆栈)
- 堆栈数据结构的实现~
- 数据结构之堆栈
- 数据结构练习:堆栈
- java数据结构之堆栈
- 数据结构---堆栈(C#)
- Oracle中日期时间的操作比较和加减
- SQL Server 2005 如何创建分区表
- Layer Programming with Quartz Core
- Struts2支持表单多对象提交
- 在Windows Mobile上监听Radio Interface Layer Notification
- 【数据结构总结】堆栈
- UNIX 技巧: UNIX 高手的另外 10 个习惯
- sql大提速,经过N次提速,从10多秒到1秒。
- isIE 判断浏览器类型
- DetachedCriteria 中distinct的使用
- test title
- 用七张表就能轻松管理存货
- test1 title
- Cannot create a server using the selected type