1.顺序存储结构
#include<stdio.h>
#include<stdlib.h>#define N 10
typedef struct _Stack
{
int top;//记录栈中有多少个元素,后面的data[top]表示栈顶
int data[N];
}stack;
stack mystack= { -1,{0} };//-1代表栈中没有元素,{0}将数组全部初始化为0
/*
判断栈是否为空,主要看stack中top的值,初始化时是一个空栈,top=-1
返回值:为1表示空栈,为0表示不是空栈
*/
int isempty()
{
if(mystack.top==-1)
{
return 1;
}
else
{
return 0;
}
}
//设置栈为空
void setempty()
{
mystack.top=-1;
}
/*
压入一个数据,成功返回1,失败返回0(栈溢出)
在入栈之前需要判断会不会导致栈溢出
*/
int push(int data)
{
if(mystack.top+1<=N-1)
{
mystack.data[++mystack.top]=data;
return 1;
}
else
{
return 0;
}
}
/*
出栈,首先要判断是否为空栈,如果为空直接返回
不为空,从栈顶返回一个元素
*/
int pop()
{
if(isempty())
{
return -1;//为空,返回-1
}
else
{
return mystack.data[mystack.top--];
}
}
int main()
{
int a[10];
int i=0;
for(i=0;i<10;i++)
{
a[i]=i;
}
for(i=0;i<10;i++)
{
push(a[i]);//压人数据
}
while(isempty()!=1)
{
printf("%d\n",pop());
}
return 0;
}
2.链式存储结构
#include "stdafx.h"
#include <iostream>
#include <exception>
using namespace std;
//栈的链式存储结构及实现
//栈的结构定义
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int sElemType;
typedef int Status;
typedef struct StackNode
{
sElemType data;
struct StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}linkStack;
//栈空
Status StackEmpty(LinkStack *S)
{
if(S->count == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
//入栈
Status Push(LinkStack *S,sElemType e)
{
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
s->data = e;
s->next = S->top;
S->top = s;
S->count++;
return OK;
}
//出栈
Status Pop(LinkStack *S,sElemType *e)
{
if(StackEmpty(S))
{
cout<<"栈空"<<endl;
return ERROR;
}
LinkStackPtr p = S->top;
S->top = p->next;
*e = p->data;
free(p);
S->count--;
return OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
int pushElem = 2;
linkStack *linkSt=(linkStack*)malloc(sizeof(LinkStack));
linkSt->count=0;
Push(linkSt,pushElem);//将2入栈
pushElem = 3;
Push(linkSt,pushElem);//将3入栈
int popElem = 0;
Pop(linkSt,&popElem);//出栈,结果输出给popElem
cout<<popElem<<endl;//输出 出栈的元素
Pop(linkSt,&popElem);//出栈,结果输出给popElem
cout<<popElem<<endl;//输出 出栈的元素
Pop(linkSt,&popElem);//出栈,没有元素了.栈空
return 0 ;
}