C语言实现数据结构-----栈

栈是一种先进后出(LIFO)的数据结构,栈的一个最重要的特征就是只能在栈顶进行入栈和出栈操作。今天我们来讲一下最简单的栈的实现,静态栈的实现,可以把它看作是一个数组,但是这个数组我们只能在它的末尾进行插入和删除操作,是一种受限制的数据结构。
在这里插入图片描述)

栈的线性存储

首先我们来定义一个栈的类型

typedef struct Stack{
	int *vect;	//元素的存储位置用void *来表示存储的元素可以是任意类型的
	size_t size;	//栈的大小
	size_t cnt;		//栈当前元素个数
}Stack;

接下来我们看一下栈的一些操作方法

初始化一个栈

给定一个栈的地址和大小(存储元素个数),可以初始化一个栈

void stack_init(Stack *s,size_t size){
	s->vect = malloc(sizeof(int)*size);
	s->cnt = 0;
	s->size = size;
}

销毁一个栈

void stack_destroy(Stack *s){
	free(s->vect);
	s->vect = NULL;
}

判断一个栈是否为空

只需要判断里面是否存在元素即可

bool stack_is_empty(Stack *s){
	return s->cnt == 0;
}

判断一个栈是否已经满

book stack_is_full(Stack *s){
	return s->cnt == s->size;
}

压栈

void stack_push(Stack *s,int data){
	s->vect[s->cnt++] = data;	//只需要把数据存放在线性表中,
	//并且把里面的元素个数+1
}

出栈

int stack_pop(Stack *s){
	return s->vect[--s->cnt];
}

查看栈顶元素

和出栈不同,查看栈顶元素不需要对立面的元素进行操作,即不需要让元素个数-1

int top(Stack *s){
	return s->vcet[s->cnt-1]
}

遍历栈

遍历栈就和遍历数组一样的操作,无需多言

void foreach(Stack *s,void(*func)(int)){
	size_t i;
	for(i=0;i<cnt;i++){
		func(s->vect[i]);
	}
}
发布了14 篇原创文章 · 获赞 84 · 访问量 2792

猜你喜欢

转载自blog.csdn.net/weixin_42617375/article/details/103741108