stack顺序存储结构

《偶刚开始学习数据结构,欢迎拍砖111》

栈是只能通过访问它的一段来实现数据存储的一种线性数据结构,换句话来说就是先进后出的原则,FILO,与队列刚好相反哈,现在只说stack。

栈包括以下几种基本运算

(1)初始化

(2)判断是否为空

(3)push

(4)pop

(5)top

其他的则根据这几种基本操作进行组合,即可实现。

栈的实现同样有顺序存储与链式存储两种方式,现在说一说顺序存储

首先顺序存储简单可以理解为对数组的操作,所以他的缺点就是容量是有限的。

ok,言归正传。

《一》array_based_stack的实现

首先同样将存储的元素设定为int

下面是stack类型

1#define MAX_STACK_SIZE 100 //栈的容量 2typedef struct ArrayBasedStack{ 3 int *base; //存储空间 4 int top; //top指向最上面的一个可用元素,为空时,top = -1; 5 6}AStack;

以及以下几个操作的定义

1int initStack(AStack* s); 2bool stackEmpty(AStack* s); 3int* push(AStack* s, int elem);//成功则返回栈顶指针,否则返回null 4int* pop(AStack* s);//返回新的栈顶指针 5int top(AStack* s);

下面是实现

1#include "stack_array_based.h" 2#include <MALLOC.H> 3#include <STDIO.H> 4int initStack(AStack* s) 5{ 6 s->base = (int *)malloc(MAX_STACK_SIZE * sizeof(int)); 7 if (s->base==NULL) 8 { 9 return -1; 10 } 11 s->top = -1; 12 return 0; 13} 14 15bool stackEmpty(AStack* s) 16{ 17 if (s->top == -1) 18 { 19 return true; 20 } 21 return false; 22} 23int* push(AStack* s, int elem) 24{ 25 if (s->top==MAX_STACK_SIZE-1) //栈满 26 { 27 return NULL; 28 } 29 s->top++; 30 s->base[s->top] = elem; 31 32 return &(s->base[s->top]); 33} 34int* pop(AStack* s)//返回新的栈顶指针 35{ 36 37 if (stackEmpty(s)) 38 { 39 return NULL; 40 } 41 s->top --; 42 if (top<0) 43 { 44 return NULL; 45 } 46 return &(s->base[s->top]); 47} 48int top(AStack* s) 49{ 50 return (s->base[s->top]); 51}

最后再来个简单的测试实例

1#include "stack_array_based.h" 2#include <MALLOC.H> 3#include <STDIO.H> 4 5int main() 6{ 7 AStack* s = (AStack*)malloc(sizeof(AStack)); 8 if (s == NULL) 9 { 10 return -1; 11 } 12 13 initStack(s); 14 printf("top:%d\n",s->top); 15 //向栈中插入是个数据 16 for (int i = 0; i<10; i++) 17 { 18 push(s,i); 19 } 20 //将数据打印 21 while(!stackEmpty(s)) 22 { 23 printf("%d\t",top(s)); 24 pop(s); 25 } 26}

实验结果如下

《二》栈的链式实现

请参照linklist,自行实现。

《偶刚开始学习数据结构,欢迎拍砖111》

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java修道之路,问鼎巅峰,我辈代码修仙法力齐天

<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav

5 手写Java Stack 核心源码

Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质。只能在一端进行插入或者删除,即压栈与出栈栈的实现比较简单,性质也简单。可以用一个数组来实现栈结构。1.入栈的时候,只在数组尾部插入2.出栈的时候,只在数组尾部删除我们来看一下Stack的用法:如下publicstaticvoidmai

Java实现顺序栈

一、分析  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。  一个标准的顺序栈