博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆栈详解
阅读量:4198 次
发布时间:2019-05-26

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

堆栈(英文:stack),台湾作堆叠,在中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英文为top)进行加入资料(push)和输出资料(pop)的运算。另外堆栈也可以用一维或的形式来完成。堆栈的另外一个相对的操作方式称为。

由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

堆栈数据结构使用两种基本操作:推入(push)和弹出(pop):

  • 推入(push)
:将数据放入堆栈的顶端(阵列形式或串行形式),堆栈顶端top指标加一。
  • 弹出(pop)
:将顶端数据资料输出(回传),堆栈顶端资料减一。

目录

[]

[] 阵列堆栈

#include
#include
/*堆疊資料結構*/struct Stack{ int Array[10];//陣列空間 int Top;//堆疊頂端指標 };/*檢查堆疊是否為空*/bool stack_empty(Stack *Stack1){ if(Stack1->Top==0) { return true; } else { return false; }}/*推入資料*/void push(Stack *Stack1,int x){ Stack1->Top=Stack1->Top+1; Stack1->Array[Stack1->Top]=x; }/*彈出資料*/int pop(Stack *Stack1){ if(stack_empty(Stack1)) { printf("underflow"); } else { Stack1->Top=Stack1->Top-1; return Stack1->Array[Stack1->Top+1]; } }int main(){ struct Stack *Stack1=(struct Stack *)malloc(sizeof(struct Stack));//宣告資料結構空間 push(Stack1,3);//推入3 push(Stack1,4);//推入4 push(Stack1,1);//推入1 push(Stack1,10);//推入10 printf("%d ",pop(Stack1));//彈出10 printf("%d ",pop(Stack1));//彈出1 printf("%d ",pop(Stack1));//彈出4 system("pause"); }

[] 串行堆栈

/*链栈的结构定义*/typedef struct {   SLink top;    // 栈顶指针   int length;   // 栈中元素个数}Stack;
void InitStack ( Stack &S ){   // 构造一个空栈 S  S.top = NULL;   // 设栈顶指针的初值为"空"   S.length = 0;   // 空栈中元素个数为0} // InitStack/*能否将链栈中的指针方向反过来,从栈底到栈顶?   不行,如果反过来的话,删除栈顶元素时,为修改其前驱指针,需要从栈底一直找到栈顶。*/
void Push ( Stack &S, ElemType e ){  // 在栈顶之上插入元素 e 为新的栈顶元素  p = new LNode;   // 建新的结点  if(!p) exit(1);  // 存储分配失败  p -> data = e;  p -> next = S.top; // 链接到原来的栈顶  S.top = p;     // 移动栈顶指针  ++S.length;     // 栈的长度增1} // Push/*在链栈的类型定义中设立"栈中元素个数"的成员是为了便于求得栈的长度。*/
bool Pop ( Stack &S, SElemType &e ){   // 若栈不空,则删除S的栈顶元素,用 e 返回其值,  // 并返回 TRUE;否则返回 FALSE  if ( !S.top )    return FALSE;     else     {      e = S.top -> data;   // 返回栈顶元素       q = S.top;       S.top = S.top -> next; // 修改栈顶指针       --S.length;       // 栈的长度减1       delete q;       // 释放被删除的结点空间      return TRUE;    }} // Pop

转载地址:http://oauli.baihongyu.com/

你可能感兴趣的文章
mongodb 加载多个文件
查看>>
MongoDB 工具
查看>>
MongoDB 应用案例
查看>>
MongoDb web 用户界面
查看>>
mongodb 特殊作用的数据库
查看>>
MongoDB 数据类型
查看>>
默认 redis 安装存在漏洞, 可以直接 获取 root 权限
查看>>
mongodb mapreduce 文档
查看>>
mongodb mapreduce 参数的详细说明
查看>>
mongodb mapreduce 结果数据 与历史数据 再次合并
查看>>
mongdb mapreduce 排查 map reduce
查看>>
mongodb mapreduce 分片
查看>>
mongodb mapreduce 总结
查看>>
iptables 设置
查看>>
APF的安装配置以及使用规则
查看>>
mongodb 分片配置 以及mapreduce
查看>>
mongodb 分片 副本集 集群
查看>>
js 创建对象
查看>>
js 类似php 静态类的使用方法
查看>>
mongodb 交互式操作和script文件脚本的区别。
查看>>