#define MAX_SIZE 255
#define true 1
#define false 0
typedef struct {
int id;
char * name;
}ElementType;
#include <stdio.h>
#include <stdlib.h>
#include "Element.h"
//栈的顺序存储方式
typedef struct SeqStack{
ElementType elements[MAX_SIZE];//顺序栈中用来存放数据元素的数组
int top;//栈顶(数组中的下标),结果为-1,则证明栈为空
int length;//当前栈的元素个数
}SeqStack;
//初始化栈
void InitSeqStack(SeqStack *seqStack);
//入栈操作,返回压入栈的结果(true/false)
int PushSeqStack(SeqStack *seqStack,ElementType element);
//以指针的方式返回出栈的元素。返回值为出栈的结果(true/false)
int PopSeqStack(SeqStack * seqStack,ElementType* element);
//清空栈
void ClearseqStack(SeqStack * seqStack);
// 栈是否为空 top==-1
//返回栈顶元素
void PopSeqTop(SeqStack *seqStack,ElementType *element);
#include "SeqStack.h"
//初始化栈
void InitSeqStack(SeqStack *seqStack){
seqStack->top=-1;//栈顶一定是指向-1的下标
seqStack->length=0;
}
//入栈操作,返回压入栈的结果(true/false)
int PushSeqStack(SeqStack *seqStack,ElementType element){
if(seqStack->top==MAX_SIZE-1){
printf("满栈,压栈操作失败");
return false;
}
seqStack->top++;//栈顶指针加1,以便加入新的元素
seqStack->elements[seqStack->top]=element;
seqStack->length++;
return true;
}
//以指针的方式返回出栈的元素。返回值为出栈的结果(true/false)
int PopSeqStack(SeqStack * seqStack,ElementType* element){
if(seqStack->top==-1){
printf("空栈,出栈失败\n");
return false;
}
*element=seqStack->elements[seqStack->top];//返回栈顶指向的元素
seqStack->top--;
seqStack->length--;
return true;
}
//清空栈
void ClearseqStack(SeqStack * seqStack){
seqStack->top=-1;
seqStack->length=0;
}
//返回栈顶元素
void PopSeqTop(SeqStack *seqStack,ElementType* element){
//判断栈是否为空
if(seqStack->top==-1){
printf("空栈,栈顶元素为空\n");
element = NULL;
return;
}
*element=seqStack->elements[seqStack->top];
printf("栈顶元素是:%d\t%s\n",element->id,element->name);
}
#include <iostream>
using namespace std;
#include "SeqStack.h"
ElementType datas[]={
{1,"哈哈哈"},
{2,"哇哇哇"},
{3,"呵呵呵"},
{4,"啦啦啦"}
};
void TestSeqStack();
int main(){
TestSeqStack();
}
void TestSeqStack(){
SeqStack * stack=(SeqStack *)malloc(sizeof(SeqStack));
ElementType *element=(ElementType *)malloc(sizeof(ElementType));
InitSeqStack(stack);
for(int i=0;i<4;i++){
printf("当前入栈:%d\t%s\n",datas[i].id,datas[i].name);
PushSeqStack(stack,datas[i]);
}
PopSeqStack(stack,element);
printf("当前出栈的元素:%d\t%s\n",element->id,element->name);
PopSeqTop(stack,element);
}