C语言实现顺序栈
main.c
#include "stack.h"
void test();
ElementType dataArray[] = {
{1,"侠客行"},
{2,"将进酒"},
{3,"神来之笔"},
{4,"青莲剑歌"}
};
int main()
{
test();
return 0;
}
void test(){
SeqStack seqstack;
ElementType * element = (ElementType *)malloc(sizeof(SeqStack));
InitSeqStack(&seqstack);
for (int i=0;i<4;i++){
PushSeqStack(&seqstack,dataArray[i]);
printf("当前入栈:%d\t%s.\n",dataArray[i].id,dataArray[i].name);
}
PopSeqStack(&seqstack,element);
printf("当前出栈:%d\t%s.\n",element->id,element->name);
}
stack.h
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 255
#define TRUE 1
#define FALSE 0
typedef struct {
int id;
char * name;
}ElementType;
//定义栈的顺序存储方式
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);
//返回栈顶元素
void GetTopElement(SeqStack * seqstack,ElementType * element);
#endif // STACK_H_INCLUDED
stack.c
#include "stack.h"
//初始化栈
void InitSeqStack(SeqStack * seqstack){
seqstack->top = -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");
}
*element = seqstack->elements[seqstack->top]; //放回栈顶指向的元素
seqstack->length--;
seqstack->top--;
return TRUE;
}
//清空栈
void ClearSeqStack(SeqStack * seqstack){
seqstack->length = 0;
seqstack->top = -1;
}
//返回栈顶元素
void GetTopElement(SeqStack * seqstack,ElementType * element){
if (seqstack->top == 1){
printf("空栈.");
element = NULL;
return;
}
*element = seqstack->elements[seqstack->top];
}
链栈