博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
顺序栈用C语言实现
阅读量:4479 次
发布时间:2019-06-08

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

从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表;

但从数据类型角度来看,它们是和线性表大不相同的两种重要的抽象数据类型。

 

顺序栈,即栈的顺序存储结构是用一组地址连续的存储单元依次存放自栈顶到栈顶的数据元素
typedef struct{    int * base;   //栈底指针,在栈构造之前和摧毁之后,base的值为NULL    int * top;    //栈顶指针,在非空栈始终指向栈顶元素的下一个位置    int stacksize;    //当前已分配的存储空间} SqStack;

base栈底指针:始终指向栈底位置,若base=NULL,则栈不存在

top栈顶指针:非空栈中的栈顶指针始终指向栈顶元素的下一个位置
注意顺序栈的栈底也是存放数据的。
/*	2016年10月28日20:46:25	静态栈*/#include
#include
#include
#define STACK_INIT_SIZE 100 //存储空间初始分配量#define SRAKINCRMENT 10 //存储空间分配增量typedef struct{ int * base; //栈底指针,在栈构造之前和摧毁之后,base的值为NULL int * top; //栈顶指针,在非空栈始终指向栈顶元素的下一个位置 int stacksize; //当前已分配的存储空间} SqStack;//函数声明void InitStack(SqStack * S);void Push(SqStack * S, int e);void StackTraverse(SqStack * S);bool Pop(SqStack * S, int * e);int main(void){ SqStack S; int val; InitStack(&S); Push(&S,1); Push(&S,2); Push(&S,3); Push(&S,4); StackTraverse(&S); printf("\n"); Pop(&S, &val); Pop(&S, &val); StackTraverse(&S); return 0;}void InitStack(SqStack * S) //初始化静态栈{ S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(NULL == S->base) { printf("内存分配失败,程序终止!\n"); exit(-1); } S->top = S->base; S->stacksize = STACK_INIT_SIZE; return;}void Push(SqStack * S, int e) //压栈{ if( (S->top - S->base) >= S->stacksize) //如果栈满 { S->base = (int *)realloc(S->base, (S->stacksize + SRAKINCRMENT ) * sizeof(int)); if(NULL == S->base) { printf("内存分配失败,程序终止!\n"); exit(-1); } S->top = S->base + S->stacksize; S->stacksize += SRAKINCRMENT; } *(S->top) = e; ++(S->top); return;}void StackTraverse(SqStack * S) //遍历输出,从栈顶开始遍历{ int * p = S->top; while( S->base != p) { printf("%d\n",*(p-1)); --p; } return;}bool Pop(SqStack * S, int * e) //出栈{ if(S->base == S->top) //如果空 { return false; } *e = *(S->top); --(S->top); return true;}

 

 

转载于:https://www.cnblogs.com/yzy-blogs/p/6011708.html

你可能感兴趣的文章
Android Dev
查看>>
Android设置上下边框或者左右边框
查看>>
Java文件操作源码大全
查看>>
Isomorphic Strings
查看>>
centos7 显示中文乱码
查看>>
BugKu-妹子的陌陌
查看>>
生成服务卡会员卡号的存储过程
查看>>
功能测试需求分析方法
查看>>
eclipse下导入jdk源码
查看>>
简易时钟
查看>>
MySQL优化 ----开篇
查看>>
grunt学习笔记
查看>>
Sharepoint 2010 Event Recievers的几个事件的限制
查看>>
个人作业1——四则运算题目生成程序
查看>>
转:对页面文章过长的处理方法
查看>>
Android四大组件之ContentProvider(学习笔记)
查看>>
Scala中柯里化函数
查看>>
using DE2-35 generate 1KHz audio signal 用DE2-35產生1KHz的音頻信號
查看>>
分享一组Rpg Marker人物行走,游戏素材图片,共20张图片
查看>>
28.uva 10891 Game of Sum 记忆化dp
查看>>