为了堆栈实现

为了堆栈数据结构如下面:

typedef struct
{
	ElemType data[MaxSize];    //栈数据
	int top;                  //栈顶指针
}SqStack;

实现下列函数:

void InitStack(SqStack* &s);    //初始化栈
void DestroyStack(SqStack* &s);  //销毁栈
int StackLength(SqStack* s);  //求栈的长度
int StackEmpty(SqStack* s);  //栈是否为空
int Push(SqStack* &s,ElemType e);  //进栈
int Pop(SqStack* &s,ElemType &e);   //出栈
int GetTop(SqStack* s,ElemType &e); //取栈顶元素
void DispStack(SqStack* s); //输出栈 

详细实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define ElemType int
#define MaxSize 1000
#define GET_ARRAY_LENGTH(array)  (sizeof(array)/sizeof(array[0]))
using namespace std; 

typedef struct
{
	ElemType data[MaxSize];    //栈数据
	int top;                  //
}SqStack;

void InitStack(SqStack* &s);    //初始化栈
void DestroyStack(SqStack* &s);  //销毁栈
int StackLength(SqStack* s);  //求栈的长度
int StackEmpty(SqStack* s);  //栈是否为空
int Push(SqStack* &s,ElemType e);  //进栈
int Pop(SqStack* &s,ElemType &e);   //出栈
int GetTop(SqStack* s,ElemType &e); //取栈顶元素
void DispStack(SqStack* s); //输出栈 

void InitStack(SqStack* &s){
	s=(SqStack* )malloc(sizeof(SqStack));
	s->top=-1;
}

void DestroySqStack(SqStack* &s){
	free(s);
}

int StackLength(SqStack* s){
	return (s->top+1);
}

int StackEmpty(SqStack* s){
	return (s->top==-1);
}

void DispStack(SqStack* s){
	for(int i=s->top;i>-1;i--)
		cout<<s->data[i]<<" ";
	cout<<endl;
}
int Push(SqStack* &s,ElemType e){
	if(s->top+1==MaxSize)return -1;
	else{
		s->data[s->top+1]=e;
		s->top++;
		return 1;
	}
}

int Pop(SqStack* &s,ElemType &e){
	if(s->top==-1)return -1;
	else{
		e=s->data[s->top];
		s->top--;
		return 1;
	}
} 

int GetTop(SqStack* s,ElemType &e){
	if(s->top==-1)return -1;
	else {
		e=s->data[s->top];
		return 1;
	}
}

int main(){
	int i=0;
	ElemType e;
	SqStack* s=NULL;
	ElemType a[]={3,76,4,25,7,8,2,43,212};
	InitStack(s);
	for(int i=0;i<GET_ARRAY_LENGTH(a);i++){
		Push(s,a[i]);
		DispStack(s);
	}
	GetTop(s,e);
	cout<<e<<" "<<StackLength(s)<<" "<<endl;
	for(int i=0;i<GET_ARRAY_LENGTH(a);i++){
		Pop(s,a[i]);
		DispStack(s);
	}
	return 0;
}

代码执行 结果例如以下:

时间: 2024-12-07 17:40:34

为了堆栈实现的相关文章

PAT-l3-002堆栈

L3-002. 堆栈 大家都知道"堆栈"是一种"先进后出"的线性结构,基本操作有"入栈"(将新元素插入栈顶)和"出栈"(将栈顶元素的值返回并从堆栈中将其删除).现请你实现一种特殊的堆栈,它多了一种操作叫"查中值",即返回堆栈中所有元素的中值.对于N个元素,若N是偶数,则中值定义为第N/2个最小元:若N是奇数,则中值定义为第(N+1)/2个最小元. 输入格式: 输入第一行给出正整数N(<= 105).随

JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结--转载http://www.cnblogs.com/kubixuesheng/p/5202561.html

转载自---http://www.cnblogs.com/kubixuesheng/p/5202561.html 俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面的堆,栈 JVM的堆,栈和os如何对应 为啥方法的调用需要栈 属于月经问题了,正好碰上有人问我这类比较基础的知识,无奈我自觉回答不是有效果,现在深入浅出的总结下: 前一篇文章总结了:JV

delphi如何输出当前堆栈

想实现,输出当前运行的堆栈,有会的吗?给点思路 方法很多,参考: https://bitbucket.org/shadow_cs/delphi-leakcheck/ 的 https://bitbucket.org/shadow_cs/delphi-leakcheck/raw/25652a1e8909dd5e560dab50ec84f475da6ba803/Source/LeakCheck.Trace.DbgHelp.pas http://bbs.2ccc.com/topic.asp?topici

数据结构Java实现05----栈:顺序栈和链式堆栈

数据结构Java实现05----栈:顺序栈和链式堆栈 一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适

使用Stack堆栈集合大数据运算

使用Stack堆栈集合大数据运算 package com.sta.to; import java.util.Iterator; import java.util.Stack; public class DaMax { public void jiaFa(String value1, String value2) { /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ // 把字符串用toCharArray拆成字符 char[] c1

数据存储的常用结构 堆栈、队列、数组、链表

数据存储的常用结构有:堆栈.队列.数组.链表.我们分别来了解一下: 堆栈,采用该结构的集合,对元素的存取有如下的特点: 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素).例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹. 栈的入口.出口的都是栈的顶端位置 压栈:就是存元素.即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置. 弹栈:就是取元素.即,把栈的顶端位置元素取出,栈中已有元素依次

6.6-2-数组与数据结构(用数组及其函数实现堆栈等数据结构)

9.5.6.1使用数组实现堆栈 实现栈 1. int array_push ( array array ,mixed var [,mixed.] ) 添加参数到数组尾部,key+1 ,返回数组元素个数 即使数组有字符串键名,添加的元素也始终是数字键. 使用array_push 函数和直接赋值的方式是一样的. 2.mixed array_pop ( array &array ) echo array_pop ( $lamp ) ; 返回最后一个元素PHP,并删除之,数组元素数量减一 实现队列 ar

堆栈的使用【ACM】

题目描述: 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. 输入: 对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束).而后的 n 行,每行的第一个字符可能是'P'或者'O'或者'A':如果是'P',后面还会跟着一个整数,表示把这个数据压入堆栈:如果是'O',表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作:如果是'A',表示询问

在linux代码中打印函数调用的堆栈的方法

之前一直有这样的需求,当时问到,也没搜到方法,现在竟然既问到了,也搜到了,哎,世事真是不能强求啊! 在Linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入: dump_stack();或 __backtrace();即可. dump_stack()在~/kernel/ lib/Dump_stack.c中定义 void dump_stack(void){ printk(KERN_NOTICE  "This architecture does not imp

GDB调试汇编堆栈

GDB调试汇编堆栈 准备工作 终端编译工具: 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386 测试代码: test.c 分析过程 1.生成汇编代码:gcc -g gdbtest.c -o gdbtest -m32 2.调试:gdb test 3.设置断点,因为目的是分析而不是调试bug,所以我们将断点设置在main函数 4.开始gdb调试:r(un),如若想获取此时的汇编代码,可用指令:disassemb