顺序栈,其实就是一个动态一维数组,为数组分配默认容量,当容量大于默认时,利用realloc()函数重新分配。
1.定义结构体
typedef struct stack{
int msize;//初始容量
int top;//
int *elem;//基指针
}stack;
2.实现各种操作:建立栈、获得栈顶元素、长度、进栈、出栈等,算法很简单直接上代码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct stack{
int msize;
int top;
int *elem;//基指针
}stack;
int create(stack *s, int size){
s->msize = size;
s->elem = (int *)malloc(sizeof(int)*s->msize);
s->top = -1;
}
int isEmpty(stack *s){
if(s->top == -1)
return 1;
return 0;
}
int getTop(stack *s){
if(isEmpty(s))
return 0;
return s->top-1;
}
int push(stack *s,int x){
if(s->top == s->msize)
{
s->elem = (int*)realloc(s->elem,sizeof(int)*(s->msize + 10));
if(!s->elem)
return 0;
s->top = s->msize;
s->msize += 10;
}
s->top = x;
s->top++;
return 1;
}
int pop(stack *s){
if(isEmpty(s))
return 0;
return --s->top;
}
int getLen(stack *s){
if(!isEmpty(s))
return s->top;
}
void destroy(stack *s){
s->top = -1;
free(s->elem);
}
int main(){
stack *s;
create(s,10);
int i;
for( i = 0; i < 7; i++)
push(s,i);
printf("栈顶元素是:%d\n",getTop(s));
printf("栈的长度是:%d\n",getLen(s));
pop(s);
printf("栈顶元素是:%d\n",getTop(s));
printf("栈的长度是:%d\n",getLen(s));
destroy(s);
}