数据结构之顺序栈的实现

顺序栈,其实就是一个动态一维数组,为数组分配默认容量,当容量大于默认时,利用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);
}

猜你喜欢

转载自blog.csdn.net/qq_43060759/article/details/83031752