2.1顺序栈的表示与实现
栈(stack),也称堆栈,是一种特殊的线性表,只允许在一端进行插入和删除操作。栈表允许操作的一端叫栈顶,另一端称栈底。栈顶是动态变化的,它由一个栈顶指针top的变量来指示。当表中没有元素时,称为空栈。
代码实现:
SSeqStack.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#define STACKSIZE 100
typedef char DataType;
typedef struct {
DataType stack[STACKSIZE];
int top;
}SeqStack;
//初试化
void InitStack(SeqStack* S)
{
S->top = 0;
}
//判空
int StackEmpty(SeqStack S)
{
if (S.top==0)
return 1; // 栈为空时返回1其他返回0
else
return 0;
}
//取栈顶元素
int GetTop(SeqStack S, int* e)
{
if (S.top<=0)
{
printf("栈已空!!!");
return 0; //成功返回1,失败返回0
}
else
{
*e=S.stack[S.top-1];
return 1;
}
}
//在栈中插入元素
int PushStack(SeqStack *S,int e)
{
if (S->top>=STACKSIZE)
{
printf("栈已满!!!");
return 0;
} //成功返回1,失败返回0
else
{
S->stack[S->top] = e;
S->top++;
return 1;
}
}
//弹出栈顶元素
int PopStack(SeqStack *S,int *e)
{
if (S->top==0)
{
printf("栈已空!!!");
return 0;
}
else
{
S->top--;
*e = S->stack[S->top];
return 1;
}
}
//获取栈长度
int StackLength(SeqStack S)
{
return S.top;
}
//清空栈
void ClearStack(SeqStack S)
{
S.top = 0;
}
test.c
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include "SSeqStack.h"
void main()
{
SeqStack S;
int i;
DataType a[] = { 'a','b','c','d','e' };
DataType e=NULL;
InitStack(&S);
for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)
{
if (PushStack(&S, a[i]) == 0)
{
printf("栈已满,不进进栈!!!");
return;
}
}
printf("出栈的元素是:");
if (PopStack(&S,&e)==1)
{
printf("%4c",e);
}
if (PopStack(&S, &e) == 1)
{
printf("%4c", e);
}
printf("\n");
if (PushStack(&S,'f')==0)
{
printf("栈已满,不能进栈!!!");
return;
}
if (PushStack(&S, 'g') == 0)
{
printf("栈已满,不能进栈!!!");
return;
}
printf("元素出栈的序列是:");
while (!StackEmpty(S))
{
PopStack(&S, &e);
printf("%4c",e);
}
printf("\n");
}