通过C语言可以实现顺序栈、共享栈与链栈的基本操作。其中,链栈的实现可以参照单链表的设置。
顺序栈的定义、初始化、判空、插入、删除与读栈
/*定义顺序栈*/
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
int data[MaxSize]; //静态数组存放栈中元素
int top; //栈顶指针
}SqStack;
/*初始化栈*/
void InitStack(SqStack *S) {
S->top = -1; //初始化栈顶指针
}
/*判空*/
bool StackEmpty(SqStack* S) {
if (S->top == -1)
return true;
else
return false;
}
/*进栈操作*/
bool Push(SqStack* S, int x) {
if (S->top == MaxSize - 1) //栈满
return false;
S->data[++S -> top] = x;
return true;
}
/*出栈操作*/
bool Pop(SqStack* S, int *x) {
if (S->top == -1)
return false;
(*x) = S->data[S->top--];
return true;
}
/*读栈顶元素*/
bool GetTop(SqStack* S, int* x) {
if (S->top == -1)
return false;
(*x) = S->data[S->top];
return true;
}
void main() {
SqStack S;
InitStack(&S);
Push(&S, 11);
Push(&S, 12);
Push(&S, 13);
int x=0;
GetTop(&S, &x);
printf("栈顶元素是%d\n", x);
Pop(&S, &x);
printf("\n%d出栈\n", x);
GetTop(&S, &x);
printf("\n新的栈顶元素是%d\n", x);
}
共享栈的定义与初始化
/*定义共享栈*/
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
int data[MaxSize]; //静态数组存放栈中元素
int top0; //0号栈栈顶指针
int top1; //1号栈栈顶指针
}ShStack;
/*初始化栈*/
void InitStack(ShStack* S) {
S->top0 = -1;
S->top1 = MaxSize;
}
链栈的定义与初始化
/*定义链栈*/
typedef struct Linknode {
int data; //数据域
struct Linknode* next; //指针域
}*LiStack; //栈类型定义