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

C++系列之刷题系列---栈的应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、共享栈
  • 二、判断回文链表
  • 总结


前言

数据结构留作业了,正好就水一期,本次是两个关于栈的题目,难度不算很难,leetcode里面的关于栈的题目我不想在这里写,等我开始刷题再去更新。


一、共享栈

设有两个栈S1和S2都采用顺序栈方式,并共享一个存储区[0,…,maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式,设设计S1和S2有关入栈和出栈的操作算法。
这题说人话就是:
在这里插入图片描述
代码:

#include <iostream>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
using namespace std;#define STDATATYPE inttypedef struct Stack
{int* a;int top;int capacity;
}ST;
//不支持打印void STInit(ST* ps);
void STPush(ST* ps,STDATATYPE x);
void STDestroy(ST* ps);
void STPop(ST* ps);
int STSize(ST* ps);
bool STEmpty(ST* ps);
int STTop(ST* ps);
void STInit(ST* ps,int n)
{assert(ps);ps->a = (STDATATYPE*)malloc(sizeof(STDATATYPE) * n);if (ps->a == NULL){perror("malloc");return;}ps->capacity = 4;ps->top = 0;
}
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STPush(ST* ps,STDATATYPE x)
{assert(ps);if (ps->capacity == ps->top){STDATATYPE*tmp = (STDATATYPE*)realloc(ps->a,sizeof(STDATATYPE) * ps->capacity * 2);if (tmp == NULL){perror("realloc");return;}ps->a = tmp;ps->capacity *= 2;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);assert(!STEmpty(ps));ps->top--;
}
int STSize(ST* ps)
{assert(ps);return ps->top;
}
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
int STTop(ST* ps)
{assert(ps);return ps->a[(ps->top) - 1];
}class ShareStack{
public:ShareStack(int maxsize){STInit(&st,maxsize);top1 = -1;top2 = maxsize;_size = maxsize;}bool Push(int StackNum,int data){if(top1 + 1 == top2){cout << "栈已经满了" << endl;return false;}if(StackNum == 1){st.a[++top1] = data;}else if(StackNum == 2){st.a[--top2] = data;}else{//cout << "栈号错误" << endl;return false;}return true;}bool Pop(int StackNum){if(top1 == -1 && top2 == _size){return false;}if(StackNum == 1 && top1 >= 0){--top1;}else if(StackNum == 2 && top2 < _size){++top2;}else{			return false;}return true;}~ShareStack(){STDestroy(&st);}
private:ST st;int top1,top2;	int _size;
};

二、判断回文链表

这题老生常谈,用栈实现就是先获取长度,然后入一半的数据,最后进行匹配即可。
如果长度是奇数的话可以跳过一个数。

#include <iostream>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
typedef struct Stack
{char* a;int top;int capacity;
}ST;class Node{public:struct Node* next;char data;public:Node(char str):next(nullptr),data(str){}
};void STInit(ST* ps);
void STPush(ST* ps,char x);
void STDestroy(ST* ps);
void STPop(ST* ps);
int STSize(ST* ps);
bool STEmpty(ST* ps);
char STTop(ST* ps);
void STInit(ST* ps)
{assert(ps);ps->a = (char*)malloc(sizeof(char) * 4);if (ps->a == NULL){perror("malloc");return;}ps->capacity = 4;ps->top = 0;
}
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STPush(ST* ps,char x)
{assert(ps);if (ps->capacity == ps->top){char*tmp = (char*)realloc(ps->a,sizeof(char) * ps->capacity * 2);if (tmp == NULL){perror("realloc");return;}ps->a = tmp;ps->capacity *= 2;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);assert(!STEmpty(ps));ps->top--;}
int STSize(ST* ps)
{assert(ps);	return ps->top;
}
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
char STTop(ST* ps)
{assert(ps);return ps->a[(ps->top) - 1];
}bool IsSymmetry(Node* head)
{int count = 0;Node* h = head,*cur = head;while(h != nullptr){h = h -> next;count++;}ST st;STInit(&st);for(int i = 0;i < count / 2;++i){STPush(&st,cur->data);cur = cur -> next; }if(count & 1) cur = cur -> next;for(int i = 0;i < count / 2; ++i){char front = STTop(&st);if(front != cur->data){return false;}STPop(&st);cur = cur -> next; }return STSize(&st) == 0;
} 

总结

下次依旧随缘。

http://www.dtcms.com/a/483996.html

相关文章:

  • 做网站着用什么软件赣榆县建设局网站
  • 关于网站开发的毕业设计网站后台怎么给图片做水印
  • 商店商品管理系统淄博网站制作网页优化
  • 网站建设网页制作软件有哪些网站建设功能清单
  • VS Code断点使用及条件断点失效问题
  • 阿里云可以做网站.net 创建网站项目
  • 公司网站推广计划书网站负责人核验现场拍摄照片电子件
  • 外包网站开发安全吗长沙做网站kaodezhu
  • 江苏优化网站价格南通网站建设服务公司
  • wordpress做产品页教程优化关键词规则
  • 东莞网站优化有哪些西宁电商网站制作公司
  • 建设网站运营方案产品软文范例软文
  • 视频图像处理技术解析
  • 房产网站定制wordpress伪静态化后百度地图显示404错误页面
  • 英文网站建设口碑好百度企业查询官网
  • 网站建设所用的工具数字创意设计包括哪些案例
  • day10_网络
  • 代做机械毕业设计网站成全视频在线观看免费高清动漫
  • 电子商务网站建设的问题全国文明城市创建工作
  • 卫朋:IPD流程落地——实施IPD的基础使能器
  • 网站开发毕设设计论文金华网络公司网站建设
  • 企业解决方案参考网站做影视网站风险大吗
  • 甘肃省铁路投资建设集团有限公司网站wordpress修改订阅者
  • 怎样优化慢速的MySQL查询语句?
  • Java算法题
  • 文章写作网站网站建设推广公司排名
  • 上海企业模板建站苏州新闻今天最新消息新闻事件
  • 网站质量度网页设计图片素材网
  • 10月14日星期二今日早报简报微语报早读
  • 网站流量功能更怎么做自己做的影视会员网站违法么