博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链栈基本操作
阅读量:4095 次
发布时间:2019-05-25

本文共 2646 字,大约阅读时间需要 8 分钟。

http://blog.csdn.net/jwentao01/article/details/46765517###;

栈基本概念: 

栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表)。 
//只能在一段进行插入和删除,因此不存在,在中间进行插入 
栈顶(top):允许插入和删除的一端。而另一端称为栈底(bottom) 
空栈:不含任何数据元素的栈。 
后进先出

两个基本操作: 

栈的插入操作(push),叫做进栈,或压栈,或入栈 
删除操作(pop),叫做出栈,或弹栈 
注意链栈next指针的指向,与队列不同: 
如果插入一个元素,它的next指针是指向前一个已经在栈中的元素的 
而队列则是,插入一个元素,其next指针是往外指,指向空。 
链栈的next指针之所以这样,是方便删除操作,这一点可以在编程的过程中体会到。 
这里写图片描述

以下是代码:

#include 
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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121

结果如下: 

这里写图片描述

/点滴积累,我的一小步O(∩_∩)O~/

你可能感兴趣的文章
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>