直接上代码
//
// main.c
// 栈的操作
//
// Created by 赫凯 on 2018/10/25.
// Copyright © 2018 赫凯. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCADMENT 10
typedef int ElemType;
typedef struct {
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
//申请一些连续的空间作栈
void initStack(sqStack *s){
s->base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if( !s->base )
exit(0);
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
//压栈
void Push(sqStack *s, ElemType e){
//栈是不是满了,满了就申请空间
if(s->top - s->base >= s->stackSize){
s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCADMENT) * sizeof(ElemType));
if( !s->base )
exit(0);
//设置新的栈顶
s->top = s->base + s->stackSize;
//设置容量
s->stackSize = s->stackSize + STACKINCADMENT;
}
*(s->top) = e;
s->top++;
}
//出栈
void Pop(sqStack *s, ElemType *e){
if(s->top == s->base)
return;
//top指向的总是新的空的元素,所以最上面的那个元素是top的下一个指向
*e = *--(s->top);
}
//清空栈
void ClearStack(sqStack *s){
s->top = s->base;
}
//销毁一个栈
void DestroyStack(sqStack *s){
int i, len;
len = s->stackSize;
for (i = 0; i < len; i++) {
free( s->base );
s->base++;
}
s->base = s->top = NULL;
s->stackSize = 0;
}
//当前容量
long StackLen(sqStack s){
return (s.top - s.base);
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
sqStack q;
initStack(&q);
int i, e;
for (i = 0; i < 12; i++) {
Push(&q, i);
}
for (i = 0; i < 6; i++) {
Pop(&q, &e);
printf("%d ", e);
}
printf("\n%ld ",StackLen(q));
return 0;
}