栈的顺序存储结构及其基本操作

数据结构开新的一章啦!栈与队列第一节,顺序栈的定义及基本操作,多个栈共享一个存储空间

#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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值