【数据结构】顺序栈

#include <STDIO.H>
#include <STRING.H>
#include <STDLIB.H>
typedef struct SeqStack
{
	int length;
	int top;
	char *data;
}seqstack;

seqstack* CreatStack(seqstack *s,int n)
{
	s=(seqstack *)malloc(sizeof(seqstack)+n*sizeof(char));
	if(s==NULL) return NULL;
	memset(s,0,sizeof(seqstack)+n*sizeof(char));
	s->length=n;
	s->top=0;
	s->data=(char *)(s+1);
	return s;
}

int StackEmpty(seqstack *s)
{
	if(s->top==0)
		return 1;
	else
		return 0;
}

int GetTop(seqstack *s,char *e)
{
	if(s->top==0)
		return -1;
	*e=s->data[(s->top)-1];
	return 0;
}

int PushStack(seqstack *s,char e)
{
	if(s->top==s->length)
		return -1;
	s->data[s->top]=e;
	s->top+=1;
	return 0;
}

int PopStack(seqstack *s,char *e)
{
	*e=s->data[s->top-1];
		s->top-=1;
	return 0;
}

int StackLength(seqstack *s)
{
	return s->top;
}

void InitStack(seqstack *s)
{
	s->top=0;
}

void destroyStack(seqstack *s)
{
	free(s);
}

int main()
{
	seqstack *s=NULL;
	int i;
	char e=65;
	s=CreatStack(s,10);
	printf("%d\n",StackEmpty(s));
	for(i=0;i<s->length;i++)
	{
		PushStack(s,65+i);
		GetTop(s,&e);
		printf("%c,",e);
	}
	printf("\n");
	printf("%d\n",StackEmpty(s));
	for(i=0;i<s->length;i++)
	{
		PopStack(s,&e);
		printf("%c,",e);
	}
	printf("\n");
	printf("%d\n",StackEmpty(s));
	destroyStack(s);
	return 0;
}

时间: 2024-11-05 06:13:30

【数据结构】顺序栈的相关文章

数据结构 - 顺序栈的实行(C语言)

数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪一端来作为栈顶和栈底比较好? 对,没错,下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小,所以让它作栈底. 我们定义一个top变量来指示栈顶元素在数组中的位置,这top就如同中学物理学过的游标卡尺的游标,它可以来回移动,意味着栈顶的top可以变大变小,但无论如何游标不能超出尺的长度.同理

数据结构--顺序栈的实现

最近在看严蔚敏的数据结构,以下是参照 http://blog.csdn.net/WLxinliang/article/details/52894338 手写的顺序栈的实现代码: 1.头文件定义了常数项 //constant.h #include<iostream> #include<string.h> #include<stdlib.h> #include<malloc.h> using namespace std; #define TRUE 1 #defi

数据结构-顺序栈

1 #include <iostream> 2 #include <stdlib.h> 3 using namespace std; 4 5 #define maxSize 30 6 7 typedef struct 8 { 9 int data[maxSize]; 10 int top; 11 }SqStack; 12 13 void InitStack(SqStack &S) 14 { 15 S.top=-1; 16 } 17 18 int IsEmpty(SqStac

数据结构——顺序栈及其操作

1 #include<iostream> 2 using namespace std; 3 4 typedef int SElemType; 5 typedef int Status; 6 #define OK 1 7 #define ERROR 0 8 9 10 #define MAXSIZE 100 //栈的最大空间 11 12 13 //顺序栈的存储结构 14 typedef struct SqStack 15 { 16 SElemType *base; //栈底指针 17 SElemT

数据结构-顺序栈(进栈 出栈)

#include<stdio.h> #define MaxSize 10 typedef struct SqStack{ int data[MaxSize]; int top ; }SqStack; //初始化顺序栈 void initStack(SqStack &S){ S.top = -1; } //判断栈是否为空 /*栈理论上不存在为满的情况,取决于内存大小*/ int isEmpty(SqStack S){ if(S.top == -1){//top为1表示为空 return

数据结构:C_顺序栈的实现

数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typedef struct { int *base; int *top; int stacksize; }SqStack; |说明: 1.base表示栈底指针,在判断出栈.初始化和重新分配空间的时候需要用到. 2.top表示栈顶指针,是栈最关键和核心的组成,入栈时top向上移动,出栈时top向下移动. 3.此

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

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

小猪的数据结构辅助教程——3.1 栈与队列中的顺序栈

小猪的数据结构辅助教程--3.1 栈与队列中的顺序栈 标签(空格分隔): 数据结构 本节学习路线图与学习要点 学习要点 1.栈与队列的介绍,栈顶,栈底,入栈,出栈的概念 2.熟悉顺序栈的特点以及存储结构 3.掌握顺序栈的基本操作的实现逻辑 4.掌握顺序栈的经典例子:进制变换的实现逻辑 1.栈与队列的概念: 嗯,本节要进行讲解的就是栈 + 顺序结构 = 顺序栈! 可能大家对栈的概念还是很模糊,我们找个常见的东西来拟物化~ 不知道大家喜欢吃零食不--"桶装薯片"就可以用来演示栈! 生产的时

顺序栈操作--数据结构(C++)版

最近学习数据结构,一开始接触感觉好难,颓废了一段时间,后来又重新翻开学习,突然感觉到很大的兴趣.对这些代码的运用都有了 一些新的认识.下面简单的讲述下最新学到的顺序栈,不知道大家学习的时候会不会有感觉,书上写的那么简单,但是我写的都是不对,不是这里有错就是那里有错,最后还是攻克了,心理慢慢地成就感. 题目大概:输入一串整数,如果 该数不等于-1,就进栈,若是等于-1,则输出栈顶整数并出栈.同时算法给出应对异常的情况. 代码实现 #include <stdio.h>#include <st

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

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