数据结构-->栈-数组实现
来源:互联网 发布:直销结算软件 编辑:程序博客网 时间:2024/06/04 01:23
- 数据结构—>栈
- 栈同样也是有序表,但是插入,删除操作限定在表的同一端,向栈里添加元素的操作称为入栈
push
,从栈里面删除元素的操作称为出栈pop
; - 当元素入栈之后,最里面的元素称为栈底,最上面的元素称为栈顶元素,对于元素的插入和删除操作都是在栈顶完成的;
- 栈顶元素的指针称为
top
,栈具有的特性称为后入先出LIFO
; - 关于系统工作栈:
- 程序在运行时,系统工作栈wi函数传递参数提供存储空间.在每次进行函数调用时,程序都要在系统工作栈的栈顶创建一个结构实例,称为活动实例或者栈帧.
- 在进行函数调用时,活动记录仅仅记录指向上一条活动记录的指针以及该哈市南湖结束后的返回地址,对于上一个记录指针同样用于指向调用该函数的栈帧以及该函数
的返回地址,通常是该函数结束后,下一条语句的执行地址; - 在某一时刻,只有一个函数体力面的元素在运行,所以这个函数的栈帧就位于系统工作栈的顶端;
- 如果这个函数调用调用其他函数,那么这个函数的局部变量,但是不包括声明为静态属性的变量,以及传递给调用函数的参数,就需要被压入帧栈,然后在系统工作
栈的顶端创建新的调用函数栈帧; - 当函数执行结束后,该函数的栈帧就会被删除,调用该函数的栈帧就会重新位于工作栈的顶端,继续执行新的语句;
- 由于递归函数是在调用自己的函数,所以上述调用机制对于递归函数来说也是适用的;
- 对于栈的实现,通常可以使用一维数组来实现:
typedef struct{ int key;}element;
- 对于栈来说,需要满足的操作包括:
CreateStack(maxStackSize)
:用于创建一个大小为max_size
的栈通常栈的创建使用数组来实现;IsFull(stack,maxStackSize)
:表示用于判断栈是否为满的操作;Isempty(stack)
:用于判断展示否为空的操作;Push(stack,item)
:首先应该判断栈是否为满,然后应该将元素压入栈顶;Pop()
:首先应该判断栈是否为空,然后将元素弹出;
- 栈通过数组来实现,是可以直接通过下标来访问元素的;
- 使用
C
语言静态数组模拟栈的操作过程,应为静态数组不能够作为函数参数进行返回,所以设置成为变量,同样的访问这里采用的是下标访问;
#include<stdio.h>#include<stdlib.h>#define MAX_SIZE 100typedef struct{ int key;} elements;elements Stack[MAX_SIZE];int top=-1;int Isempty(elements *Stack){ return (top < 0 ? 0 : 1);}int Isfull(elements *Stack){ return (top == MAX_SIZE ? 0 : 1);}void Push(elements *Stack, int data){ if (!Isfull(Stack)) { fprintf(stderr, "Stack Isfull\n"); exit(EXIT_FAILURE); } else { top++; Stack[top].key = data; }}elements Pop(elements *Stack){ if (!Isempty(Stack)) { fprintf(stderr, "The Stack is empty\n"); exit(EXIT_FAILURE); } else return Stack[top--];}int main(){ Push(Stack,10); Push(Stack,9); Push(Stack,8); Push(Stack,7); Push(Stack,6); Push(Stack,5); Push(Stack,4); Push(Stack,3); Push(Stack,2); Push(Stack,1); Pop(Stack); Pop(Stack); printf("myStack contains:\n"); int i=0; for(i=top;i>=0;i--){ printf("[ %d ]\n",Stack[i].key); } return 0;}
- 对于使用静态数组来模拟栈的运行有一下几点不足:
- 在函数里面申请的空间在函数返回时,会进行释放;
- 使用数组的方式没有实现
Stack
的初始化操作;
- 推荐使用堆内存来扩展容量空间;
阅读全文
0 0
- 数据结构-->栈-数组实现
- 数据结构-----栈数组实现
- 数据结构---栈(数组实现)
- 数据结构-用数组实现栈
- 【数据结构】栈-数组的实现
- [数据结构] 栈的数组实现
- 数组实现栈的数据结构
- 【数据结构】栈的数组实现
- 简单数据结构---数组实现栈
- 【JAVA数据结构】栈(数组实现)
- 【数据结构】栈的数组实现
- 用静态数组实现栈数据结构
- 数据结构之数组实现栈结构
- 数据结构栈stack的动态数组实现
- 数据结构学习之数组栈实现
- 经典数据结构--数组实现的栈
- 利用数组实现数据结构——栈
- 简单数据结构之数组栈(C++实现)
- 在线安装Eclipse插件时,出现错误
- java面试知识点整理之扩展系列
- 递归查找子物体/获取子物体上组件
- 数据结构 顺序查找(算法思想和源代码)
- 模仿NameNode和DataNode之间通信
- 数据结构-->栈-数组实现
- spring依赖对象的自动装配
- angular中$scope.$apply和$scope.$digest的区别
- python绘制随机网络图形
- NO4、python运算符
- 栈的应用 表达式求值
- POJ 2406 Power Strings (KMP) kmp循环节
- 阿里云centos环境之mysql安装<二>
- 记录自学Java的第一篇