线性表之数组实现栈结构
来源:互联网 发布:网络投资理财可信吗 编辑:程序博客网 时间:2024/06/10 18:58
用数组实现栈结构
实现
栈结构的数组实现是用一个一维数组存放数据,数据每次从队尾加入,删除时也从队尾删除,要实现这种增删操作需要使用一个记录下标的指针(top)来指向栈顶。当添加元素时添加到 arr[top+1]位置,当要做删除操作时 使top–;指向倒数第二个元素,使其称为新栈顶。旧栈顶则被忽略,当其所占空间要使用时直接覆盖即可。
栈与递归
栈是一种很常用的结构,比如函数调用就使用栈结构,当程序执行到函数调语句时先把当前函数保存在栈中,即压栈。然后进入函数调用执行。当再次碰到函数调用语句时则重复上述步骤。当一个函数调用A执行完后,再把调用A的函数从栈中取出,继续执行这条函数。如此重复,直到main函数执行结束。下面是递归演示
void recursionDemo(array *arr,int count){ //判断栈是否满,如果已满则不在继续执行。这是递归结束的条件 if( !(arr->top < arr->length-1) ){ return ; } push(arr,count); printf(" %d 元素进栈\n",count); //调用自身 recursionDemo(arr,++count); //打印后 出栈 printf(" %d 元素出栈\n",*getTop(arr)); pop(arr); 打印结果 1 元素进栈 2 元素进栈 3 元素进栈 4 元素进栈 5 元素进栈 5 元素出栈 4 元素出栈 3 元素出栈 2 元素出栈 1 元素出栈请按任意键继续. . .}
递归常用于分治法解决问题,每一次递归都使问题规模更小,直到问题规模最小(不可拆分)时结束递归。
完整demo代码如下:
#define SIZE 6 //定义栈结构typedef struct array{ int data[SIZE]; int length; int top;}array;//初始化array *newArr(){ array *arr = (array *)malloc(sizeof(array)); //0下标空闲,不使用 arr->top = 0; arr->length = SIZE;}//判栈空int isEmpty(array *arr){ return arr->top == 0;}//出栈void pop(array *arr){ if(isEmpty(arr)){ printf("the stack is null"); return; } arr->top--;}//返回栈顶元素的指针int *getTop(array *arr){ return isEmpty(arr)? NULL:&arr->data[arr->top];}//入栈void push(array *arr,int value){ if(arr->top< arr->length-1){ arr->data[++(arr->top)] = value; }}//testvoid ASTest(){ array *arr = newArr(); push(arr,1); push(arr,2); push(arr,3); push(arr,4); push(arr,5); while(!isEmpty(arr)){ printf("value = %d top = %d\n",*getTop(arr),arr->top); pop(arr); } //现在是空栈了 printf("\n递归演示\n"); //栈的递归演示 recursionDemo(arr,1);}void recursionDemo(array *arr,int count){ //判断栈是否满,如果已满则不在继续执行。这是递归结束的条件 if( !(arr->top < arr->length-1) ){ return ; } push(arr,count); printf(" %d 元素进栈\n",count); //调用自身 recursionDemo(arr,++count); //打印后 出栈 printf(" %d 元素出栈\n",*getTop(arr)); pop(arr);}/*运行结果:value = 5 top = 5value = 4 top = 4value = 3 top = 3value = 2 top = 2value = 1 top = 1递归演示 1 元素进栈 2 元素进栈 3 元素进栈 4 元素进栈 5 元素进栈 5 元素出栈 4 元素出栈 3 元素出栈 2 元素出栈 1 元素出栈请按任意键继续. . .*/
阅读全文
0 0
- 线性表之数组实现栈结构
- 线性结构之数组
- 数据结构之线性结构--数组
- 线性表之链表实现栈结构
- 线性结构之顺序表------C实现
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性结构--->线性表实现
- java数据结构:线性表之数组实现
- 1.数据结构--线性表之数组实现
- 数据结构之线性表(数组实现)
- 线性表之基于数组的实现
- 线性表的顺序存储结构--用数组实现
- 线性表-数组实现
- 线性表数组实现
- 线性表之数组
- 数据结构-线性结构-线性表及其实现
- Spring_demo2_Annotation_AutoWired
- servlet
- Editor_EditorWindow学习06
- Linux-Ubuntu最常用命令
- apt-get详解
- 线性表之数组实现栈结构
- Core ML 文档翻译
- 44-45.java变量类型
- 计蒜客————整数转换成罗马数字
- Linux expect使用,用户交互的福音
- 几种常用的设计模式介绍
- 微信公众号三方平台开发【全网发布及全网发布接入检测】
- iOS图片精确提取主色调算法iOS-Palette(附源码)
- jquery下载,实时更新jquery1.2到最新3.2.1所有版本下载