数据结构-----------------栈

本文深入讲解了栈数据结构的基本概念,包括其先进后出的工作原理。详细介绍了两种栈的实现方式:顺序栈和链栈,提供了初始化、判空、入栈、出栈等核心操作的代码实现,并分析了各操作的时间复杂度。

先进后出(first int last out)

 

#include<iostream>
#define OVERFLOW -2
#define OK 0
#define MAXSIZE 100
#define ERROR -1

顺序栈

//-----------------顺序栈的存储结构-------------------

#define MAXSIZ 100
typedef struct
{
	SElemType *base; //栈底指针
	SElemType *top;  //栈顶指针 
 } SqStack; 

1)初始化     O(1)

Status InitStack(SqStack &S)
{
	S.base=new SElemType[MAXSIZE]
	if(!S.base) exit(OVERFLOW)
	S.top=S.base;
	return OK
}

2)判空   O(1)

Status StackEmpty(SqStack S)
{
	if(S.top==S.base) return OK;
	return ERROR;
 }

3)入栈   O(1)

Status Push(SqStack &S,SElemType e)
{
	if(S.top-S.base==MAXSIZE)  return ERROR;
	*S.top++=e;
	return OK;
}

4)出栈   O(1)

Status Pop(SqStack &S,SElemType &e)
{
	if(S.top==S.base) return ERROR;
	e=*--S.top;
	return OK; 
 }

5)取栈顶元素   O(1)

 SElemType GetTop(Statack S)
 {
 	if(S.top!=S.base)
 	 return *(S.top-1);
  } 

6)删除栈中的元素e    O(2n)

Status Delete(Stack &S,SElemType e)
{
  	Stack T;
  	SElemType d;
  	InitStack(T);
  	while(!StackEmpty(S))
  	{
  		Pop(S,d);
  		if(d!=e) Push(T,d);
	  }
	while(!StackEmpty(T))
	{
		Pop(T,d);
		Push(S,d);
	}
}

链栈

       以下操作复杂度均为O(1)

//------------链栈的存储结构-------------

typedef struct StackNode
{
	Elempty data;
	struct StackNode *next; 
 }StackNode,*LinkStack;

1)初始化

Status InitStack(LinkStack &S)
{
 	S==NULL;
 	return OK;
}

2)入栈

Status Push (LinkSatck &S,SElemtype e)
{
  	StackNode *p;
  	p=new StackNode;
  	p->data=e;
  	p->next=S;
  	S=p;
  	return OK;
} 

3)出栈

Status Pop(LinkStack &S,SElemType &e)
 {
   	StackNode *p;
   	p=new StackNode;
   	if(S==NULL) return ERROR;
   	e=S->data ;
   	p=S;
   	S=S->next ;
   	delete p;
}

4)取栈顶元素

SElemtype GetTop(LinkStack S)
{
		if(S!=NULL)
		 return S->date;
 }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值