栈的基本操作

顺序栈

/*
* Copyright (c) 2017
* 安徽大学计算机科学与技术学院
* All rights reserved.
*/
#include <cstdio>
#include<iostream>
#include<bits/stdc++.h>
#include <malloc.h>
using namespace std;
#define StackInitSize 20
typedef struct{
    int *base;
    int *top;
    int stacksize;
}SqStack;
int InitStack(SqStack &S);    //初始化栈
int StackEmpty(SqStack S);    //判断栈是否为空
int GetTop(SqStack S, int &e);  //获取当前栈顶的值
int Push(SqStack &S, int e);    //进栈
int Pop(SqStack &S, int &e);     //出栈

int main(){
    SqStack *S = (SqStack*)malloc(sizeof(SqStack));
    int len, e;
    int i;
    InitStack(*S);
    len = StackLength(*S);
    if(StackEmpty(*S))
      printf("空栈\n");
      printf("执行1-20进栈\n");
    for (i=1; i<=StackInitSize; i++)
        Push(*S, i);
    if(StackEmpty(*S))
        printf("空栈\n");
    GetTop(*S, e);
    printf("栈顶元素是:%d\n", e);
    printf("执行出栈操作\n");
    for (i=1; i<=StackInitSize; i++){
        Pop(*S, e);
        printf("%d ", e);
    }
    printf("\n");
    ClearStack(*S);
    return 0;
}

int InitStack(SqStack &S){
    S.base = (int *)malloc(StackInitSize*sizeof(int));
    if (S.base == NULL)
        exit(1);
    S.top = S.base;
    S.stacksize = StackInitSize;
    return 1;
}

int StackEmpty(SqStack S){
    if (S.top == S.base)
        return 1;
    else
        return 0;
}

int StackLength(SqStack S){
    int len;
    len = S.top - S.base;
    return len;
}

int GetTop(SqStack S, int &e){
    if (S.base == S.top)
    {
        printf("栈中无元素\n");
        exit(2);
    }
    e = *(S.top - 1);
    return 0;
}

int Push(SqStack &S, int e){
    if (S.top - S.base >= S.stacksize)
    {
        if (S.base == NULL)
        {
            exit(3);
        }
        S.top = S.base + S.stacksize;
        S.stacksize += StackInitSize;
    }
    *(S.top++) = e;
    return 0;
}

int Pop(SqStack &S, int &e){
    if (S.top == S.base)
        exit(4);
    e = *--S.top;
    return 0;
}



链栈

/*
* Copyright (c) 2017
* 安徽大学计算机科学与技术学院
* All rights reserved.
*/
#include <cstdio>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
    int data;
    struct node* next;
}stacknode, *linkstack;
    //初始化栈
void initstack(linkstack *s)
{
    *s=new stacknode;
    (*s)->next=NULL;
}
   //判断是否为空
bool stackempty(linkstack s)
{
    if(s->next==NULL)
        return 1;
    return 0;
}
    //入栈操作
void pushstack(linkstack s,int e)
{
    linkstack p;
    p=new stacknode;
    p->data=e;
    p->next=s->next;
    s->next=p;
}
   //出栈操作
void popstack(linkstack s)
{
    linkstack p;
    p=s->next;
    if(stackempty(s))
        cout<<"栈空"<<endl;
    else
    {
        s->next=p->next;
        free(p);
    }
}
//获取栈顶元素
void getstack(linkstack s)
{
    if(stackempty(s))
        cout<<"空栈";
    else
    {
        cout<<(s->next)->data<<" ";
    }
}
int main()
{
    int i;
    linkstack s;
    initstack(&s);
    cout<<"将1-20压入栈"<<endl;
    for(i=1;i<=20;i++)
        pushstack(s,i);
    cout<<"出栈"<<endl;
    for(i=1;i<=20;i++)
    {
        getstack(s);
        popstack(s);
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值