堆栈基本解释

堆栈(Stack):  具有一定操作约束的线性表


只在一端(栈顶,top)做插入,删除


插入数据:入栈 (Push)

删除数据:出栈(Pop)

先入后出:Last in First Out


例子:平时洗碗的时候的碗洗完后放在最底端相当于push 然后清洗的时候相当于pop


类型名称:堆栈(Stack)

数据对象集:一个零个或多个元素的有穷线性表。

操作集:长度为MaxSize的堆栈S Statck,堆栈元素item属于 ElementType


方法1.Statck CreateStatck(int MaxSize):生成空堆栈,其最大长度为MaxSize;

方法2.int IsFull(Statck S,int MaxSize); 判断堆栈S是否已满;

方法3.void push(Stack S,ElementType item):将元素item压入堆栈;

方法4.int IsEmpty(Statck S):判断堆栈是否为空;

方法5.ElementType Pop(Stack S);删除并返回栈顶元素



#include<iostream>
using namespace std;




//顺序栈




//顺序栈的定义 
#define MaxSize 10      //储存数据元素的最大个数
typedef struct{
int Data[MaxSize];
int Top;         //指示栈顶的位置 
}Stack;


//基本操作方法


void push(Stack* Ptrs,int item)          //入栈 
{
if(Ptrs->Top == MaxSize-1){
cout<<"堆栈满"<<endl;
return;
}else{
Ptrs->Data[++(Ptrs->Top)] = item;
return;
}



int pop(Stack *Ptrs)                     //出栈 
{
if(Ptrs->Top == -1){
cout<<"堆栈空"<<endl;
return 0; 
}else
return (Ptrs->Data[Ptrs->Top--]);
}


链栈


链栈式的存储结构实际上就是一个单链表叫做链栈。插入和删除操作只能在链栈的栈顶进行

/链栈 
typedef struct Node{
int Data;
struct Node* Next;
}LinkStack;
LinkStack* Top; 


//链表的创建


LinkStack* CreateStack()            /*构建一个堆栈的头结点返回指针*/
{
LinkStack* S;
S = (LinkStack*)malloc(sizeof(struct Node));
S->Next = NULL;
return S;
}


int IsEmpty(LinkStack* S)
{/*判断堆栈S是否为空*/
return (S->Next == NULL);
}


void Push(int Data,LinkStack *S)               //链表的添加 
{
LinkStack* Tmpcell = (LinkStack*)malloc(sizeof(LinkStack));
Tmpcell->Data = Data;
Tmpcell->Next = S->Next;
S->Next = Tmpcell;
}
 
 
 int Pop(LinkStack* S)
 {                                            //删除并返回栈顶的元素 
  struct Node* FirstCell;                   //变量作用释放内存
  int TopElem;
  if(IsEmpty(S))
  {
  cout<<"堆栈空"<<endl;
  return NULL;
  }
  else
  {
  TopElem = S->Data;
  FirstCell = S->Next;
S->Next = FirstCell->Next;
free(FirstCell);
return TopElem;
  }
  } 




 void show(LinkStack *S)
 {
LinkStack *a = (LinkStack*)malloc(sizeof(struct Node));
a = S->Next;


while(a)
{
cout<<a->Data<<endl;
a = a->Next;
}
 
 }



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值