栈的学习
来源:互联网 发布:淘宝好做还是微店好做 编辑:程序博客网 时间:2024/06/11 06:03
1.栈的定义
栈(stack)是限制仅在表一端进行插入或删除操作的线性表。
(1)通常称插入或删除的一端为栈顶(Top),另一端为栈底(Bottom)
(2)当表中没有元素时称为空栈
(3)栈为后进先出(last in first out)线性表,也称为LIFO表
2.顺序栈
顺序栈的类型定义
#define stacksize 1000;//预分配的栈的空间最多为1000个元素typedef int datatype;struct seqstack{datatype data[stacksize];int top;};
顺序栈的基本操作
栈置空
/** * Description:栈置空 */void initstack(struct seqstack *s){s -> top = -1;}
栈判空
/** * Description:判断栈空 */int stackempty(struct seqstack *s){int flag;flag = (s -> top == -1)? 1 : 0;return flag;}
判栈满
/** * Description:判断栈满 */int stackfull(struct seqstack *s){int flag;flag = (s -> top == stacksize)? 1 : 0; return flag;}
入栈、出栈操作
/** * Description:进栈操作 */void push(struct seqstack *s,x){s -> top ++;if(stackfull)exit("stack overflow\n");//数组溢出s -> data[s -> top] = x;}/** * Description:出栈操作 */void pop(struct seqstack *s){if(stackempty(s))exit("stack is empty!\n");//数组为空return s -> data[s -> top --];}
获取栈顶元素
/** * Description:获取栈顶元素 */datatype stacktop(struct seqstack *s){if(stackempty(s))exit("stack is empty!\n");//数组为空return s -> data[s -> top];}
3.链栈
链栈的类型定义
链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。
typedef struct stacknode{datatype data;struct stacknode *next;}stacknode;typedef struct{stacknode *top;//栈顶指针}linkstack;
注意:
(1)linkstack结构类型定义是为了函数体中修改top指针本身
链栈的基本运算
栈置空
/** * Description:栈置空 */void initstack(linkstack *s){s -> top = NULL;}
判断栈空
/** * Description:判断栈空 */int stackempty(linkstack *s){int flag;flag = (s -> top == NULL)? 0 : 1;return flag;}
入栈、出栈操作
/** * Description:入栈 */void push(linkstack *s, datatype x){struct stacknode *p;p = malloc(sizeof(struct stacknode));p -> data = x;p -> next = s -> top;s -> top = p;}/** * Description:出栈 */datatype pop(linkstack *s){datatype x;struct stacknode *p = s -> top;if(stackempty(s))exit("stack is empty!\n");x = p -> data;s -> top = p -> next;free(p);return x;}
获取栈顶元素
/** * Description:获取栈顶元素 */datatype stacktop(linkstack *s){if(stackempty(s))exit("stack is empty!\n");return s -> top -> data;}
- 数据结构---栈的学习
- 栈的学习
- 栈的学习
- 栈的学习
- 进程栈的学习
- 栈的简单学习
- 栈的学习笔记
- 栈的学习
- 【数据结构学习5】栈的学习
- 队列和栈的学习
- 我对栈的学习
- 栈的学习-四则运算实例
- 栈的学习和应用
- 栈的学习(1)
- 栈与队列的学习
- #! 的学习
- 学习的
- [算法学习]栈的出栈序列
- iOS Nav+TabBar下的self.title,self.navigationItem.title,self.tabBarItem.title区别和联系
- 常用sql语句
- JVM 垃圾回收 总结
- Oracle中sequence简介
- struts2 中的 addActionError 、addFieldError、addActionMessage的方法【转】
- 栈的学习
- js排序的方法。
- 关于spring定时器一次调用却触发了两次trigger的问题分析
- *(type **)用法
- 《C++ Primer》十五章面向对象编程例题1
- sql基本语法select、insert、update、delete、distinct等
- 淘宝开放平台技术历程
- shell脚本学习
- 【模拟】第一题 分数化小数(fracdec.pas/c/cpp)