线性表之栈的数组实现

#include<stdio.h>

#include<malloc.h>

typedef struct node

{

int *pBase;

int len;//数组最大容纳长度

int top;//数组有效长度

}stack,*Stack;

void initStack(Stack,int);

void push(Stack,int);

void pop(Stack,int *);

bool stackEmpty(Stack);

bool stackFull(Stack);

void main()

{

stack stack;

initStack(&stack,6);

printf("开始压栈\n");

//压栈

push(&stack,2);

push(&stack,3);

push(&stack,4);

push(&stack,5);

//出栈

printf("开始出栈\n");

int val;

pop(&stack,&val);

pop(&stack,&val);

pop(&stack,&val);

pop(&stack,&val);

}

void initStack(Stack stack,int len)

{

stack->pBase=(int *)malloc(sizeof(int)*len);// 注意这地方初始化要分配内存。

stack->len=len;

stack->top=-1;//注意这地方坐标应当指明为-1

}

void push(Stack stack,int val)

{

if(stackFull(stack))

{

printf("栈已经满了,无法压栈");

return;

}

stack->top++;

stack->pBase[stack->top]=val;

}

bool stackFull(Stack stack)

{

if(stack->len-1==stack->top)

return true;

else

return false;

}

void pop(Stack stack,int *val)

{

if(stackEmpty(stack))

{

printf("当前栈已经为空,无法出栈");

return;

}

*val=stack->pBase[stack->top];

printf("%d  ",*val);

stack->top--;

}

bool stackEmpty(Stack stack)

{

if(stack->top==-1)

return true;

else

return false;

}

时间: 2024-10-08 10:17:20

线性表之栈的数组实现的相关文章

数据结构回顾之顺序存储结构中的线性表(栈与队列顺序线性表实现)

说到数据结构呢,对于一个Coder来说还是蛮重要的啦,每次看数据结构的东西都有新的收获,这两天在回顾数据结构的知识.当然啦,虽然数据结构有些是理论的东西,如果好好的理解数据结构的东西还是少不了的代码的支撑的.数据结构简单的来说吧,可以分为两大类,一个是数据的"物理存储结构",另一种是数据的"逻辑存储结构".数据的"物理存储结构"又可分为顺序的和链式的(下面将会结合着代码打印内存地址的形式来观察物理存储结构). 逻辑存储结构又可分为集合,线性, 树

&lt;2014 05 16&gt; 线性表、栈与队列——一个环形队列的C语言实现

栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外,还有一些扩展的数据结构,如双端队列.双栈.超队列.超栈等,它们是一种扩展与变异结构. 线性表有顺序存储和链接存储两类,这是针对计算机的线性存储空间作出的分类.前者可以是数组,后者可以是链表.字符串是线性表最常见的应用. 这里我用C语言实现了一个基于数组环形队列,它具有固定的队列空间.相比于链表实现,

Learning Data Structure_2_线性表、栈和队列

一个人在学校的日子有些寂寞,但是st说男人要耐得住寂寞,做学问也是如此吧.今天看了线性表.栈和队列的内容.以下是学习记录. 线性表(list) 1.定义:0个或多个数据元素的有限序列,元素有且只有一个直接后继和一个直接前驱:基本操作ListLength.GetElem.LocateElem.ListInsert等,并集Union的实现. 2.线性表的顺序存储结构 指用一段地址连续的存储单元依次存储数据元素(c语言中用数组实现改结构):数组长度>=线性表的长度:对于任意位置的存入或取出的所需时间相

【Java】 大话数据结构(6) 线性表之栈

本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所示.   1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针).一个长度为5的栈的示意图如下: 实现程序: /** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * @author Yongh * */ public class SqStac

[考研系列之数据结构]线性表之栈

?基本概念 栈的定义 限定仅在表尾进行插入或删除的线性表 组成 栈顶 栈底 基本操作 入栈(PUSH) 往栈中插入一个元素 弹栈(POP) 从栈顶删除一个元素 栈的表示 顺序栈 链栈 对于顺序栈,有两个指针base和top base指向栈底 top指向栈顶 对于栈的一些基本情况: 栈不存在时候 base=NULL 栈为空时  top=base 栈的长度 top-base 链栈略过. 栈的应用 1 数制转换 数制转换我们使用一种称之为"辗转相除法"的算法.此算法的基本原理基于: N=(N

数据结构和算法 (二)数据结构基础、线性表、栈和队列、数组和字符串

Java面试宝典之数据结构基础 —— 线性表篇 一.数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已.比 如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会 有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为这种特点,使得数组适合:查询比较频繁,增.删比较少的情况,这就是数据结构的概念.数据结构 包括

数据结构代码整理(线性表,栈,串,二叉树)。。持续更新中。。。

//线性表 #include <cstdio> #include <cstring> #include <iostream> #include <cstdlib> using namespace std; ///都用c语言写的 ///建议从主函数开始看 int sequence_map[100005]; ///顺序表的数组 int total_sequence=0,total_list=0; ///定义两个全局变量用来计算顺序表与链表长度,初始值为0 str

线性表之栈与队列

一.栈是限定仅在表尾进行插入和删除操作的线性表 队列是只允许在一端进行插入操作,而在另另一端进行删除操作的线性表. 允许插入和删除的一端称为栈顶,另一端称为栈底,不包含任何数据元素的栈称为空栈,栈称为后进先出  LIFO结构 栈的抽象数据类型 ADT 栈 (stack) Data 同线性表.元素具有相同的类型,相邻元素具有前驱和后继关系 Operation InitStack(*S):初始化操作,建立一个空栈S DestroyStack(*S):若栈存在,则销毁它 ClearStack(*S):

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大