当前位置: 首页 > news >正文

【数据结构与算法】栈和队列(上)

记录自己所学,无详细讲解

栈的实现--使用动态数组

1.项目目录文件

2.头文件 stack.h

#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>
struct Stack
{int* _a;int top;int capacity;
};
typedef struct Stack Stack;
void StackInit(Stack* p); //初始化
void StackDestory(Stack* p); //销毁
void StackPush(Stack* p,int n);//入栈
void StackPop(Stack* p);//出栈
int StackTop(Stack* p);//查看栈顶
int StackSize(Stack* p);//查看栈大小
bool StackEmpty(Stack* p);//栈是否为空

3.函数定义源文件 stack.c

#include "stack.h"
void StackInit(Stack* p)
{p->_a = (int*)malloc(sizeof(int) * 4);assert(p->_a);p->top = 0;p->capacity = 4;
}
void StackDestory(Stack* p)
{assert(p);free(p->_a);p->_a = NULL;p->top = 0;p->capacity = 4;
}
void StackPush(Stack* p, int n)
{assert(p);	if (p->top == p->capacity){int * new = (int*)realloc(p->_a, p->capacity*2*sizeof(int));assert(new);p->_a = new;p->capacity = p->capacity * 2;}p->_a[p->top] = n;p->top++; 
}
void StackPop(Stack* p)
{assert(p);//p->_a[p->top] = 0; 没必要assert(p->top>0);//栈空了再出栈直接报错中止p->top--;//p->capacity--;
}
int StackTop(Stack* p)
{assert(p);assert(p->top> 0);//栈为空不能调; return p->_a[p->top-1];
}
int StackSize(Stack* p)
{assert(p->top > 0);return p->top;
}
bool StackEmpty(Stack* p)
{assert(p);if (p->top == 0){return true;}return false;
}

4.函数调用测试源文件test.c

#include "stack.h"
int main()
{Stack st;StackInit(&st);//StackDestory(&st);StackPush(&st,5);StackPush(&st, 4);StackPush(&st, 3);StackPush(&st, 2);StackPush(&st, 1); //StackPop(&st);//StackPop(&st);//StackPop(&st);//StackPop(&st);//StackPop(&st);printf("%d\n",StackTop(&st));printf("%d\n",StackSize(&st));if (StackEmpty(&st)){printf("没东西");}else{printf("有东西");}while (!StackEmpty(&st)){printf("%2d", StackTop(&st));StackPop(&st);}
}


http://www.mrgr.cn/news/52184.html

相关文章:

  • 接口测试(全)
  • 如何将 ECharts 图表插入 HTML Canvas
  • AirServer免费终身版本Win5.6.3+Mac7.2.7
  • WebGl 使用缓冲区对象绘制多个点
  • I2S协议:【图文讲解】
  • 计算生物学与生物信息学漫谈-1-测序一路走来
  • DynamicExpresso
  • 在 C# 中通过 JsonConvert.DeserializeObject 将时间戳转换为 DateTime
  • 无团队无资金,洗发水三月热销2600万?
  • 个人用Python复习笔记(待补充)
  • ESP32-C3实现定时器的启停(Arduino IDE)
  • C2. Adjust The Presentation (Hard Version)
  • 【ComfyUI Flux Lora】Flux 开启人物时尚摄影!拒绝胶质感!肤质表现更加细腻且真实!AWPortraitFL
  • 得物iOS函数调用栈及符号化调优实践|得物技术
  • Java中的基本循环结构详解
  • AcWing 861:二分图的最大匹配 ← 匈牙利算法
  • 单细胞分析Seurat使用相关的10个问题答疑精选!
  • 【Vue】项目部署本地部署和服务器部署
  • 机器学习摘下诺奖桂冠
  • javaWeb项目-Springboot+vue-校园论坛系统功能介绍