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

顺序栈的C/C++语言实现

三部分文件:link.cpp link.h Test.cpp;

main函数在Test.cpp中,link.cpp为link.h的具体实现;

link.h

#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#define SIZE 5
enum ERR_TYPE {TYPE_ERR = 1,TYPE_OK,TYPE_EMPTY,TYPE_FULL
};
typedef int data_t;
typedef struct Stack {data_t data[SIZE];int iTop;//栈顶下标
}Stack;
Stack* CreateStack();//创建空栈
int Push(Stack* pStack, data_t tdata);
int Pop(Stack* pStack, data_t* pData);//第二个参数是data_t*类型的;
int GetTop(Stack* pStack);
int IsEmpty(Stack* pStack);
int IsFull(Stack* pStack);
void Print(Stack* pStack);

link.cpp


#include"link.h"
Stack* CreateStack() {Stack* p = (Stack*)malloc(sizeof(Stack));if (p == NULL)return NULL;//void* memset(void* ptr, int value, size_t num);所以说malloc后面的括号有多大就memset多大memset(p, 0, sizeof(Stack));//memset(p,0,sizeof(p));errorp->iTop = -1;return p;
}
int Push(Stack* pStack, data_t tdata) {if (pStack == NULL)return TYPE_ERR;if (IsFull(pStack) == TYPE_FULL){printf("栈满了\n");return TYPE_FULL;}pStack->data[++pStack->iTop] = tdata;printf("插入了%d\n", pStack->data[pStack->iTop]);return TYPE_OK;
}
int Pop(Stack* pStack, data_t* pData) {if (pStack == NULL)return TYPE_ERR;if (IsEmpty(pStack) == TYPE_EMPTY){printf("栈为空\n");return TYPE_EMPTY;}*pData = pStack->data[pStack->iTop--];printf("%d出栈\n", *pData);return TYPE_OK;
}
int GetTop(Stack* pStack) {if (pStack == NULL)return TYPE_ERR;return pStack->iTop;
}
int IsEmpty(Stack* pStack) {if (pStack == NULL)return TYPE_ERR;return pStack->iTop == -1 ? TYPE_EMPTY : TYPE_OK;
}
int IsFull(Stack* pStack) {if (pStack == NULL)return TYPE_ERR;return pStack->iTop == SIZE-1 ? TYPE_FULL : TYPE_OK;
}
void Print(Stack* pStack) {for (int i = 0; i <= pStack->iTop; i++) {printf("%d\t", pStack->data[i]);}printf("\n");
}

Test.cpp


#include "link.h"
int main() {Stack* pStack = CreateStack();Push(pStack, 10);Push(pStack, 11);Push(pStack, 12);Push(pStack, 13);Push(pStack, 14);Print(pStack);int res;Pop(pStack, &res);Pop(pStack, &res);Pop(pStack, &res);Pop(pStack, &res);Pop(pStack, &res);}
//此类代码特别关心两个问题:
//入栈有可能满了?
//出栈有可能空了?


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

相关文章:

  • 爬虫 可视化 管理:scrapyd、Gerapy、Scrapydweb、spider-admin-pro、crawllab、feaplat、XXL-JOB
  • springboot高校实验室教学管理系统的设计和实现
  • LLM手撕
  • C++学习, 类
  • 代码随想录训练营day35|46. 携带研究材料,416. 分割等和子集
  • 无人机飞手及装配维修技术前景详解
  • 第二证券:大牛股突发,停牌不超3天,此前22个涨停!
  • 如何使 div 居中?CSS 居中终极指南
  • Vue——day08之收集表单数据
  • archery 1.9.1 二开-本地环境搭建
  • Layer Normalization论文解读
  • 【自动驾驶】控制算法(七)离散规划轨迹的误差计算
  • 《OpenCV计算机视觉》—— 对图片的各种操作
  • 每日读源码---Day1_processdata
  • C++11 --- function 包装器以及 bind 适配器
  • 如何打造抗冲击的超级电容器?用啥材料好?
  • 李宏毅机器学习笔记——反向传播算法
  • 如何防止邮件内容外发时泄露
  • 源代码为啥要进行加密?怎么给源代码进行加密?
  • 玻璃盖板视觉丝印机应用