最近复习C和数据结构,顺序栈是最简单的栈实现。它是用数组来存放数据,用一个int变量来记录当前栈顶元素的下标,用-1来表示空栈,结构简单。
写一个完整的测试程序,编译器虽然是C++的,但程序是按照C语言规范来写的。
程序实现:依次向栈中压入0~19二十个数字,然后依次出栈并输出。
头文件:SeqStack.h
//
SeqStack.h
#define TRUE 1
#define FALSE 0
#define STACK_SIZE 20
typedef int ElementType;
typedef struct
... {
ElementType data[STACK_SIZE];
int top;
} SeqStack;
void InitStack(SeqStack * s) ... {
s->top = -1;
}
int IsEmpty(SeqStack * s) ... {
if(s->top == -1) return TRUE;
return FALSE;
}
int IsFull(SeqStack * s) ... {
if(s->top == STACK_SIZE-1) return TRUE;
return FALSE;
}
int Push(SeqStack * s, ElementType element) ... {
if(IsFull(s)) return FALSE;
s->top ++;
s->data[s->top] = element;
return TRUE;
}
int Pop(SeqStack * s, ElementType * element) ... {
if(IsEmpty(s)) return FALSE;
*element = s->data[s->top];
s->top --;
return TRUE;
}
int GetTop(SeqStack * s,ElementType * element) ... {
if(IsEmpty(s)) return FALSE;
*element = s->data[s->top];
return TRUE;
}
#define TRUE 1
#define FALSE 0
#define STACK_SIZE 20
typedef int ElementType;
typedef struct
... {
ElementType data[STACK_SIZE];
int top;
} SeqStack;
void InitStack(SeqStack * s) ... {
s->top = -1;
}
int IsEmpty(SeqStack * s) ... {
if(s->top == -1) return TRUE;
return FALSE;
}
int IsFull(SeqStack * s) ... {
if(s->top == STACK_SIZE-1) return TRUE;
return FALSE;
}
int Push(SeqStack * s, ElementType element) ... {
if(IsFull(s)) return FALSE;
s->top ++;
s->data[s->top] = element;
return TRUE;
}
int Pop(SeqStack * s, ElementType * element) ... {
if(IsEmpty(s)) return FALSE;
*element = s->data[s->top];
s->top --;
return TRUE;
}
int GetTop(SeqStack * s,ElementType * element) ... {
if(IsEmpty(s)) return FALSE;
*element = s->data[s->top];
return TRUE;
}
主文件:SeqStackTest.cpp
//
SeqStackTest.cpp
#include < stdio.h >
#include " SeqStack.h "
void main() ... {
//initialization
SeqStack s;
InitStack(&s);
//input
for(int i=0; i<20; i++) ...{
Push(&s,i);
}
//output
while(!IsEmpty(&s)) ...{
int rslt;
Pop(&s,&rslt);
printf("%d ",rslt);
}
}
#include < stdio.h >
#include " SeqStack.h "
void main() ... {
//initialization
SeqStack s;
InitStack(&s);
//input
for(int i=0; i<20; i++) ...{
Push(&s,i);
}
//output
while(!IsEmpty(&s)) ...{
int rslt;
Pop(&s,&rslt);
printf("%d ",rslt);
}
}