数据结构开新的一章啦!栈与队列第一节,顺序栈的定义及基本操作,多个栈共享一个存储空间
#include<stdio.h>
#include<malloc.h>
#define maxsize 1000
typedef int datatype;
typedef struct
{
datatype data[maxsize];//栈的元素存储空间
int Top;//栈顶指针
}SeqStack;
SeqStack *s;
/*
s->Top<=-1表示空栈
s->Top=maxsize表示栈满
s->data[0]为栈底元素
s->data[s->Top]为栈顶元素
*/
//顺序栈的基本运算
//建立空顺序栈
void InitStack(SeqStack *&s)
{
s=(SeqStack*)malloc(sizeof(SeqStack));
s->Top=-1;
}
//置空栈
void SetNull(SeqStack *s)
{
s->Top=-1;
}
//判断栈是否为空
int Empty(SeqStack *s)
{
if(s->Top<=-1)return 1;
else return 0;
}
//求栈中元素个数
int Length(SeqStack *s)
{
return(s->Top+1);
}
//进栈
int Push(SeqStack *s,datatype e)
{
if(s->Top>=maxsize-1){
printf("Stack Overflow");
return 0;
}
else{
s->Top++;
s->data[s->Top]=e;
return 1;
}
}
//出栈
int Pop(SeqStack *s,datatype &e)
{
if(Empty(s)){
printf("Stack Underflow");
return 0;
}
else{
e=s->data[s->Top];
s->Top--;
return 1;
}
}
//取栈顶元素
int GetTop(SeqStack*s,datatype &e)
{
if(Empty(s)){
printf("Stack Underflow");
return 0;
}
else{
e=s->data[s->Top];
return 1;
}
}
//多个顺序栈共享连续空间
typedef struct
{
datatype v[maxsize];
int Top1,Top2;
}seqstack;
seqstack *S;
//多个栈公用连续空间的基本操作
//栈的初始化
void InitStack(seqstack *&s)
{
s=(seqstack*)malloc(sizeof(seqstack));
s->Top1=-1;
s->Top2=maxsize;
}
//置空栈
void setnull(seqstack *s,int i)
{
switch(i){
case 1:s->Top1=-1;break;
case 2:s->Top2=maxsize;
}
}
//进栈
void push(seqstack *s,datatype x,int i)
{
if(s->Top1+1==s->Top2) printf("向量空间溢出");
else{
switch(i){
case 1:s->Top1++;s->v[s->Top1]=x;break;
case 2:s->Top2++;s->v[s->Top2]=x;
}
}
}
//出栈
datatype pop(seqstack *s,int i)
{
datatype x;
switch(i){
case 1:if(s->Top1==-1)printf("1号栈下溢");
else{
x=s->v[s->Top1];
s->Top1--;
}
case 2:if(s->Top2==maxsize)printf("2号栈下溢");
else{
x=s->v[s->Top2];
s->Top2++;
}
}
return x;
}
int main()
{
return 0;
}