栈操作之顺序栈

数据结构:

栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。

操作系统:

由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

具体操作有:初始化 判断栈满 判断栈空 push pop 读取栈顶

#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define Stack_Size 50
#define StackElementType char
/*顺序栈*/

typedef struct
{
	StackElementType elem[Stack_Size]; /*用来存放栈中元素的一维数组*/
	int top;          		/*用来存放栈顶元素的下标,top为-1表示空栈*/
}SeqStack;

/*初始化*/
void InitStack(SeqStack *S)
{
	/*构造一个空栈S*/
  	S->top = -1;
}

/*判栈空*/
int IsEmpty(SeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/
{
	return(S->top==-1?TRUE:FALSE);
}

/*判栈满*/
int IsFull(SeqStack *S)	/*判断栈S为满栈时返回值为真,反之为假*/
{
	return(S->top==Stack_Size-1?TRUE:FALSE);
}

int Push(SeqStack *S,StackElementType x)
{
	if(S->top==Stack_Size-1)
		return(FALSE);  /*栈已满*/
	S->top++;
	S->elem[S->top] = x;
	return(TRUE);
}

int Pop(SeqStack *S,StackElementType *x)
{
	/* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */
	if(S->top == -1)  /*栈为空*/
		return(FALSE);
	else
	{
  		*x = S->elem[S->top];
		S->top--;    /* 修改栈顶指针 */
  		return(TRUE);
	}
}

/*读栈顶元素。*/
int GetTop(SeqStack *S,StackElementType *x)
{
	/* 读取栈S的栈顶元素,放到x所指的存储空间中,但栈顶指针保持不变 */
	if(S->top == -1)  /*栈为空*/
		return(FALSE);
	else
	{
  		*x = S->elem[S->top];
  		return(TRUE);
	}
}

int main()
{
SeqStack T;
InitStack (&T);
StackElementType x,y;
x='@';

if(Push(&T,x))
cout<<"储存成功!"<<endl;
else
cout<<"入栈失败!"<<endl;

cout<<"目前T.top="<<T.top<<"读取后="<<endl;
if(GetTop(&T,&x))
cout<<T.top<<endl;
else
cout<<"读栈失败!"<<endl;

if(Pop(&T,&y))
cout<<y<<endl;
else
cout<<"出栈失败!"<<endl;

return 0;
}
时间: 2024-12-15 16:57:51

栈操作之顺序栈的相关文章

用递归函数和栈操作逆序栈

题目描述 一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构. 给定一个栈Stack以及栈的大小top,请返回逆序后的栈. 测试样例: [1,2,3,4,5],5 返回:[5,4,3,2,1] Solution 1:思路:第一步,将最上面的数出栈保存,然后将栈逆序(递归) 第二步,将第一步中出栈的数插入到栈的最底层(

栈基本操作(顺序栈)

#include<iostream> #include<cstdlib> using namespace std; //定义初始化长度和每次增加的长度 const int STACK_INIT_SIZE=10; const int STACK_INCREAMENT=2; struct Stack{ int* base; //栈底 int* top; //栈顶 int stacksize; //已分配栈的大小 }; //函数声明 void show();//主界面 void Init

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名 代码如下: #i

数据结构之栈(1)——顺序栈

栈作为一种特殊的线性表,在计算机中有顺序储存结构和链式存储结构两种存储结构,根据这个我们把栈分为顺序栈和链栈 顺序栈 栈顶:用top来动态地表示栈顶元素在顺序栈中的位置,当top=-1时表示栈为空 这个是栈这个数据类型的定义 typedef char ElemTypeStack; typedef struct{ ElemTypeStack elem[MAXSIZE]; int top; }FirStack; 用一个数组来存储数据,对应的下标表示他在栈中的位置,top表示栈顶元素对应的下标,若栈为

数据结构基础(6) --顺序栈的设计与实现

栈是一种只允许在一端进行插入或删除操作的线性表.其特点为:先进后出(FILO)/后进先出(LIFO); 栈 VS. 队列 栈和队列都是动态集合, 但在栈中, 可以去掉的是最近插入的那一个,:栈实现了一种后进先出(last-in, first-out)的策略;类似的, 在队列中, 可以去掉的元素总是在集合中存在时间最长的那一个:队列实现了先进先出(first-in, first-out)的策略[下一篇我们着重复习队列]. 栈的示意图: //顺序栈的实现与解析 template <typename

_DataStructure_C_Impl:顺序栈

// _DataStructure_C_Impl:顺序栈 #include<stdio.h> #include<stdlib.h> #define StackSize 100 typedef char DataType; typedef struct{ DataType stack[StackSize]; int top; }SeqStack; //将栈初始化为空栈只需要把栈顶指针top置为 void InitStack(SeqStack *S){ S->top=0;//把栈

Java栈之顺序栈存储结构实现

一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实现 顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,栈底位置固定不变,它的栈顶元素可以直接通过顺序栈底层数组的数组元素arr[size - 1]来访问. 1 package com.ietree.basic.datastructure.stack; 2 3 import java.

线性表之顺序栈C++实现

线性表之顺序栈 栈是限定仅在表尾(栈顶)进行插入删除操作的线性表,FILO:先进后出 一.顺序栈的头文件:SeqStack.h //顺序栈头文件#include<iostream>using namespace std;//设置顺序栈的大小const int StackSize = 10;template<class DataType>//定义顺序栈的模板类型class SeqStack{public: //无参构造器,初始化栈顶指针 SeqStack(){ top = -1; }

顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置.通常以top=-1表示空栈. 代码如下: #include<iostream> using namespace std; #define  TRUE 1 #define  FALSE 0 //顺序栈的存储结构 #define Stack_Size 50 //设栈中元素个数为50 typedef struct { int elem