【小白】栈的顺序存储结构的实现(C语言版)

系列文章目录

第一章 线性表的顺序存储结构的实现(C语言版)
第二章 线性表的链式存储结构的实现(C语言版)


文章目录

  • 系列文章目录
  • 前言
  • 一、栈是什么?
  • 二、栈的顺序存储结构的实现
    • 1.实现所需要的函数
    • 2.定义常量
    • 3.定义结构体
    • 4.实现()
      • 4.1 顺序栈的初始化
      • 4.2判断栈是否为空
      • 4.3获取顺序栈的长度
      • 4.4顺序栈的置空
      • 4.5顺序栈的销毁
      • 4.6顺序栈的入/压栈
      • 4.7顺序栈的出/弹栈
  • 总结


前言

分享一下自己学习数据结构时的代码


一、栈是什么?

1:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾(栈顶)进行插入和删除操作的线性表。
一个具有注脚的文本。1
2:栈采用先进后出的原则
【小白】栈的顺序存储结构的实现(C语言版)_第1张图片

二、栈的顺序存储结构的实现

1.实现所需要的函数

Status IniStack(stack *s);
Status StatckEmpty(stack s);
Status StackLength(stack s);
Status ClearStack(stack s);
Status DestroyStack(stack s);
Status Push(stack *s,int data);
Status Pop(stack *s,int *e);

2.定义常量

#define OK 0;
#define ERROR 1;
#define OVERFLOW -1;
#define TRUE 1;
#define FALSE 0;
#define MAX 10
typedef int Status;

3.定义结构体

typedef struct stack{
     
    int data;
    //定义栈底
    struct stack *base;
    ///定义栈顶
    struct stack *top;
    //定义栈的长度
    int stackSize;
}stack;

4.实现()

4.1 顺序栈的初始化

Status IniStack(stack *s){
     
	//为栈分配内存空间,栈底指向第一个栈的元素
    (*s).base = (stack *)malloc(sizeof(stack) * MAX);
    //分配内存失败
    if(!(*s).base)
        return ERROR;
     //栈顶和栈底指向同一个位置
    (*s).top = (*s).base;
    //栈的长度可以随便定
    (*s).stackSize = 10;
    return OK;
}

4.2判断栈是否为空

Status StatckEmpty(stack s){
     
	//栈顶和栈底指向同一位置
    if(s.base == s.top)
        return TRUE; 
    return FALSE;
}

4.3获取顺序栈的长度

Status StackLength(stack s){
     
    return s.top-s.base;
}

4.4顺序栈的置空

Status ClearStack(stack s){
     
	//直接让栈顶指向栈底即可
	//这里不需要修改栈顶和栈底之间的元素,当入栈时,原来栈中存储的元素存储的内容自动更换
    s.top = s.base;
}

4.5顺序栈的销毁

Status DestroyStack(stack s){
     
	//释放栈底指向的空间
    free(s.base);
    s.base = s.top = NULL;
    s.stackSize = 0;
}

4.6顺序栈的入/压栈

Status Push(stack *s,int data){
     
	//判断栈是否已满
    if((*s).top - (*s).base > MAX)
        return OVERFLOW;
     //将栈顶元素赋值
    ((*s).top)->data = data;
    //栈顶向上移
    (*s).top++;
    printf("%p\n",(*s).top);
    return OK;
}

4.7顺序栈的出/弹栈

Status Pop(stack *s,int *e){
     
	//判断栈是否为空
    if((*s).top == (*s).base)
        return ERROR;
     //栈顶向下移
    (*s).top--;
    *e = ((*s).top)->data;
    printf("%p\n",(*s).top);
    return OK;
}

总结

栈:元素采取先进后出的原则

顺序栈的优点:查询速度快
顺序栈的缺点:使用一块连续的内存空间


  1. 摘自:科普中国 ↩︎

你可能感兴趣的:(c语言,数据结构)