数据结构之 栈

栈(Stack): 一种只允许在一端进行插入和删除的线性表,并且此端为栈顶(top),另一端不允许插入和删除,为栈底。无任何元素时为空栈。

栈的操作可以归结为: 后进先出(LIFO)。即先存入的数据,必须要等到在其上面的数据都弹出之后才可以读取。
栈的结构定义:
//栈元素静态存储结构  C
#define maxSize 100         //最大元素数量
typedef int SElemType;      //元素类型
typedef struct {
	SElemType elem[maxSize];  //分配相应大小的数组
	int top;                  //栈顶元素
} SeqStack; 

//栈元素动态存储结构 C
#define initSize 100   //初始化元素数量
typedef int SElemType  
typedef struct {
	SElemType *elem;   //栈元素存储数组
	int maxSize,top;   //栈最大元素数量,栈顶元素    
} SeqStack;

栈初始化操作:
//栈的初始化
void InitStack(SeqStack &S)
{
	S.elem = new SElemType[initSize];      //给栈分配存储空间
	if(!S.elem) {cerr<<"存储失败\n";exit(1);}  //分配成功确定
	S.maxSize = initSize;                    //设置最大元素数量
	S.top = -1;                             //栈顶初始化指向
};

动态顺序栈进栈操作:
  .判断栈是否已满,若栈不满则将元素入栈至栈顶,若栈空间已满则进行溢出操作(扩充动态栈的存储空间)。
void Push(SeqStack &S, SElemType x)
{
	if(!SeqStack) { cerr<<"参数错误";exit(1);}
	else
		if(StackFull(S)) 
	{
		SElemType *newArray = new SElemType[S.maxSize*2];  //建立二倍于原栈空间的新空间
		if(!newArray) { cerr<<"存储分配失败";exit(1);}
		//逐个元素复制
		for(int i=0; i < S.top; i++)
			newArray[i] = S.elem[i];
		S.maxSize = 2*S.maxSize;
		delete []S.elem;
		S.elem = newArray;
	}
	else
		S.[++S.top] = x;
}
(程序为自己参照编写,如有错误,请指正)

退栈操作:
判断栈是否为空,空则返回0,非空则将栈顶元素值赋值给另一个元素,将栈顶指针减一。
//退栈操作
int Pop(SeqStack &S, SElemType &x)    //引用,则删除的是元素,而不是元素值
{
	if(S.top = -1) return 0;     //空栈
	x = S.elem[S.top--];
	return 1;
}

如果栈顶指针为-1则此栈为空。
如果栈的最大容量与当前元素个数相等则栈已满。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值