栈是一种只允许在表的一端进行操作的数据结构,插入操作称为进栈,删除操作称为入栈。
顺序栈是指采用顺序存储的结构的栈,即在内存中用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时设置一个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");
}