顺序栈
/*
* 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);
}
}