顺序栈的实现
编程技术  /  houtizong 发布于 3年前   51
#include <iostream>#include <stdlib.h>#define INIT_SIZE 3#define INCREASE_SIZE 1using namespace std;typedef int Elemtype;typedef struct { Elemtype *base; Elemtype *top; int iStackSize;} myStack;//函数声明void initStack(myStack &);void showStack(myStack &);void push(myStack & , Elemtype);void addStackValues(myStack & , int);Elemtype getTopValue(myStack &);Elemtype pop(myStack &);Elemtype searchStack(myStack & , int);int main(){ //初始化一个空的栈空间 myStack ms; initStack(ms); //给栈空间添加元素 int iAddCount; cout << "输入要添加的元素个数:" << endl; cin >> iAddCount; cout << "输入要添加元素的值:" << endl; addStackValues(ms , iAddCount); //输出栈空间里面的元素值 cout << "栈里面的元素值为:" << endl; showStack(ms); //删除栈顶元素 Elemtype ePop = pop(ms); cout << "删除值为:" << ePop << endl; cout << "删除后,栈空间的元素值为:" << endl; showStack(ms); //获取栈顶元素 cout << "栈顶元素值为:" << getTopValue(ms) << endl; //向栈空间中添加元素 cout << "输入要添加的元素:" << endl; Elemtype eInput; cin >> eInput; push(ms , eInput); cout << "添加后元栈空间元素值为:" << endl; showStack(ms); //查找栈空间元素 int iSearchIndex; cout << "输入要查找元素的地址值:" << endl; cin >> iSearchIndex; Elemtype eSearchResult = searchStack(ms , iSearchIndex); cout << "第" << iSearchIndex << "位的元素为:" << eSearchResult << endl; return 0;}//显示栈里面所有元素void showStack(myStack &ms) { Elemtype *curr = ms.top; while(curr > ms.base) { curr--; cout << *(curr) << " "; } cout << endl;}//初始化栈空间void initStack(myStack &ms) { ms.base = (Elemtype *)malloc(INIT_SIZE * sizeof(Elemtype)); ms.top = ms.base; ms.iStackSize = INIT_SIZE;}//给栈空间加入元素值void addStackValues(myStack &ms , int times) { Elemtype value; for(int i = 0; i < times; i++) { cin >> value; push(ms , value); }}//向栈空间中添加一个元素值void push(myStack &ms , Elemtype elem) { //length记住元素的个数,判断栈空间的内存是否已满,若已满则再开辟空间 int length = ms.top - ms.base; if(length >= ms.iStackSize) { ms.base = (Elemtype *)realloc(ms.base , (ms.iStackSize + INCREASE_SIZE) * sizeof(Elemtype)); if(!ms.base) { cout << "元素添加失败!" << endl; } ms.top = ms.base + length; ms.iStackSize = ms.iStackSize + INCREASE_SIZE; } //将元素加入栈空间 *(ms.top) = elem; ms.top++;}//获得栈顶元素Elemtype getTopValue(myStack &ms) { return *(ms.top - 1);}//移除栈顶元素Elemtype pop(myStack &ms) { //判断栈是否为空 if(ms.top == ms.base) { cout << "栈空间没有元素存在!" << endl; return -1; } //移除栈顶元素,并把栈顶元素做返回值返回 ms.top--; return *(ms.top);}//查找相应位置的元素值Elemtype searchStack(myStack &ms , int index) { Elemtype *curr = ms.top; if(index > ms.top - ms.base) { cout << "查找的元素不存在!" << endl; } //移动到相应的元素位置 for(int i = 0; i < index; i++) { curr--; } return *(curr);}
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接