顺序栈和链式栈

栈是一种只允许在表的一端进行操作的数据结构,插入操作称为进栈,删除操作称为入栈。
顺序栈是指采用顺序存储的结构的栈,即在内存中用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时设置一个top指针,指示栈顶元素的当前位置。

在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
#define true 0
#define false 1
typedef struct {
	int data[MAX_SIZE];
	int top;
}seqstack;

void init_stack(seqstack *S)
{
	S->top = -1;
}

int is_stack_empty(seqstack *S)
{
	return S->top == -1 ? true : false;
}

int push_stack(seqstack *S, int data)
{
	S->top++;
	if (S->top == MAX_SIZE)
		return false;
	S->data[S->top] = data;
	return true;
}
int pop_stack(seqstack *S, int *data)
{
	if (is_stack_empty(S) == 0) {
		return false;
	}
	*data = S->data[S->top];
	S->top--;
	return true;
}

int get_stack_top(seqstack *S)
{
	if (is_stack_empty(S) == 0)
		return true;
	return S->data[S->top];
}

int main()
{
	seqstack S;
	init_stack(&S);
	push_stack(&S, 1);
	push_stack(&S, 2);
	push_stack(&S, 3);
	printf("%d\n", get_stack_top(&S));
	int elm;
	pop_stack(&S, &elm);
	printf("%d\n", get_stack_top(&S));
	system("pause");
	return 0;

}

链式栈通过单链表的形式来实现

在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
	int data;
	struct node* next;
}s_node;
typedef struct {
	struct node* top;
}link_stack;

void init_stack(link_stack* S)
{
	S->top = NULL;
}
int is_stack_empty(link_stack* S)
{
	return S->top == NULL ? 1 : 0;
}
int push_stack(link_stack* S, int data)
{
	s_node *tmp = (s_node*)malloc(sizeof(s_node));
	if (!tmp) {
		return -1;
	}
	tmp->data = data;
	tmp->next = S->top;
	S->top = tmp;
	return 0;
}

int pop_stack(link_stack* S, int* data)
{
	if (is_stack_empty(S))
		return -1;
	s_node* tmp;
	tmp = S->top;

	S->top = S->top->next;
	*data = tmp->data;

	free(tmp);

	return 0;
}

int get_stack_top(link_stack* S)
{
	return S->top->data;
}
int main()
{
	link_stack S;
	init_stack(&S);
	push_stack(&S, 1);
	push_stack(&S, 3);
	push_stack(&S, 5);
	printf("%d\n", get_stack_top(&S));
	int data;
	pop_stack(&S, &data);
	printf("%d\n", get_stack_top(&S));
	system("pause");

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值