链栈基本操作
2015-07-05 20:43
387 查看
栈基本概念:
栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表)。
//只能在一段进行插入和删除,因此不存在,在中间进行插入
栈顶(top):允许插入和删除的一端。而另一端称为栈底(bottom)
空栈:不含任何数据元素的栈。
后进先出
两个基本操作:
栈的插入操作(push),叫做进栈,或压栈,或入栈
删除操作(pop),叫做出栈,或弹栈
注意链栈next指针的指向,与队列不同:
如果插入一个元素,它的next指针是指向前一个已经在栈中的元素的
而队列则是,插入一个元素,其next指针是往外指,指向空。
链栈的next指针之所以这样,是方便删除操作,这一点可以在编程的过程中体会到。
以下是代码:
结果如下:
/点滴积累,我的一小步O(∩_∩)O~/
栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表)。
//只能在一段进行插入和删除,因此不存在,在中间进行插入
栈顶(top):允许插入和删除的一端。而另一端称为栈底(bottom)
空栈:不含任何数据元素的栈。
后进先出
两个基本操作:
栈的插入操作(push),叫做进栈,或压栈,或入栈
删除操作(pop),叫做出栈,或弹栈
注意链栈next指针的指向,与队列不同:
如果插入一个元素,它的next指针是指向前一个已经在栈中的元素的
而队列则是,插入一个元素,其next指针是往外指,指向空。
链栈的next指针之所以这样,是方便删除操作,这一点可以在编程的过程中体会到。
以下是代码:
#include <iostream> using namespace std; typedef struct node{ int data; struct node *next; }Node; typedef struct stack{ Node *top; /**书本写法是:加一个bottom,个人感觉没什么用,反而加一个count用于表示节点数会更好*/ int count; }Link_Stack; /**创建一个空栈*/ Link_Stack * Creat_stack() { Link_Stack *p; p = new Link_Stack; /**这一步不要忘!需要给p创建空间*/ p->count = 0; p->top = NULL; return p; } /**入栈操作:push*/ Link_Stack * Push_stack(Link_Stack *p,int elem) { if(NULL == p) return NULL; Node *temp; temp = new Node; temp->data = elem; temp->next = p->top; /**注意这里和队列的入队操作不同,next指向不同,为了方便出栈操作*/ p->top = temp; p->count += 1; return p; } /**出栈操作:pop*/ Link_Stack * Pop_stack(Link_Stack *p) { Node *temp; temp = p->top; if(NULL == p->top) { cout << "The stack is empty." << endl; return p; } else{ p->top = p->top->next; /** temp = temp->next; 千万不能这么写,看看下一步是什么?*/ delete temp; p->count -= 1; return p; } } /**栈的遍历:输出栈*/ int Show_stack(Link_Stack *p) { Node *temp; temp = p->top; if(NULL == p->top) { cout << "The stack is empty." << endl; return 0; } while(NULL != temp) { cout << temp->data << ' '; temp = temp->next; } cout << endl; return 0; } int main() { int i = 5; int elem; Link_Stack *p; p = Creat_stack(); while(i--) { cin >> elem; Push_stack(p,elem); } cout << "空栈插入5个元素后:" << endl; Show_stack(p); cout << "删除3个元素后:" << endl; for(i = 3;i--;) { Pop_stack(p); } Show_stack(p); cout << "count:" << p->count << endl; cout << "删除2个元素后:" << endl; for(i = 2;i--;) { Pop_stack(p); } Show_stack(p); cout << "count:" << p->count << endl; Push_stack(p,6); cout << "插入元素6后:" << endl; Show_stack(p); cout << "count:" << p->count << endl; return 0; }
结果如下:
/点滴积累,我的一小步O(∩_∩)O~/
相关文章推荐
- python文件读写
- 单例01
- iOS阶段学习第15天笔记(NSDate操作)
- EM算法
- 密码学基础知识(二)密码体制
- 【ctsc2007】【挂缀】
- eclipse 远程调试mapreduce
- E题hdu 1425 sort
- OpenFlow Switch学习笔记(四)——Matching
- 青蛙跳台问题
- 码农、黑客和2B程序员之间的区别
- [LeetCode][Java] Two Sum
- XMLHttpRequest对象的属性和方法
- 数据结构基础 之 树与二叉树 各类操作、思想与实现
- MD5 加密
- 2016, Hillary Clinton Win!
- 欢迎使用CSDN-markdown编辑器
- OpenGL的版本历史和发展
- xib自定义UIView报错误 "forUndefinedKey:]: this class is not key value coding-compliant for the key"
- MVC强类型视图、强类型HTML辅助方法