顺序栈
栈是一种只能在一端进行插入或删除操作的线性表。允许进行操作的一端称为栈顶
顺序栈是用数组的方式表示的。
特点:先进后出
顺序栈的结构体声明
typedef struct stack{
data_t data[N];
int top;
}STACK;
top指向栈顶元素的下一个数组下标
顺序栈的操作
基本操作:创建、入栈(单端插入)、出栈(单端删除)、遍历(打印)等。
创建一个顺序栈
STACK *create()
{
STACK *stack = (STACK*)malloc(sizeof(STACK));
memset(stack->data,0,sizeof(data_t)*N);
stack->top = 0;
}
初始化栈,top指向数组下标0
判断栈是否为满
int isFull(STACK *stack)
{
return stack->top==N?1:0;
}
判断栈是否为空
int isEmpty(STACK *stack)
{
return stack->top==0?1:0;
}
入栈(单端插入)
void push(STACK *stack,data_t val)
{
if(isFull(stack)){
printf("栈满\n");
return;
}
stack->data[stack->top] = val;
stack->top++;
}
出栈(单端删除)
void pop(STACK *stack)
{
if(isEmpty(stack)){
printf("栈空\n");
return;
}
stack->top--;
}
遍历(打印)
void printStack(STACK *stack)
{
int i = stack->top;
//while(stack->top!=0)//传进来的是地址
while(i!=0)
{
i--;
printf("%d ",stack->data[i]);
}
putchar(10);
}
示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef int data_t;
typedef struct stack{
data_t data[N];
int top;
}STACK;
STACK *create();
int isFull(STACK *stack);
int isEmpty(STACK *stack);
void push(STACK *stack,data_t val);
void printStack(STACK *stack);
void pop(STACK *stack);
int main(int argc, const char *argv[])
{
STACK *stack = create();
push(stack,1);
push(stack,2);
push(stack,3);
push(stack,4);
push(stack,5);
printStack(stack);//5 4 3 2 1
pop(stack);
printStack(stack);//4 3 2 1
return 0;
}
//创建一个顺序栈
STACK *create()
{
STACK *stack = (STACK*)malloc(sizeof(STACK));
memset(stack->data,0,sizeof(data_t)*N);
stack->top = 0;
}
//判断栈是否为满
int isFull(STACK *stack)
{
return stack->top==N?1:0;
}
//判断栈是否为空
int isEmpty(STACK *stack)
{
return stack->top==0?1:0;
}
//插入数据(入栈)
void push(STACK *stack,data_t val)
{
if(isFull(stack)){
printf("栈满\n");
return;
}
stack->data[stack->top] = val;
stack->top++;
}
//遍历
void printStack(STACK *stack)
{
int i = stack->top;
//while(stack->top!=0)//传进来的是地址
while(i!=0)
{
i--;
printf("%d ",stack->data[i]);
}
putchar(10);
}
//删除数据(出栈/弹栈)
void pop(STACK *stack)
{
if(isEmpty(stack)){
printf("栈空\n");
return;
}
stack->top--;
}
结果
5 4 3 2 1
4 3 2 1
本文链接:https://shengto.top/data_structure/155.html
转载时须注明出处及本声明