#define MAX_SIZE 255#define true 1#define false 0typedef 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);
}