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

昆山做网站好的网站注册账号

昆山做网站好的,网站注册账号,新能源汽车价格表,优改网logo设计免费官网入口用队列实现栈 点击链接答题 思路: 出栈:找不为空的队列,将size-1个数据导入到另一个队列中。 入栈:往不为空队列里面插入数据 取栈顶元素: 例如: 两个队列: Q1:1 2 3Q2:…

用队列实现栈

点击链接答题

思路:

出栈:找不为空的队列,将size-1个数据导入到另一个队列中。

入栈:往不为空队列里面插入数据

取栈顶元素:

例如:

两个队列:

  1. Q1:1 2 3
  2. Q2:NULL

如果是栈的话:

  1. 插入1 2 3
  2. 出栈一次
  3. 插入4
  4. 全部出栈

得到:3 4 2 1


Q1里面的1 2出栈到Q2,把3取出来,此时Q1NULL

取出了3

Q2里面插入4,此时Q21 2 4

Q2里面的1 2出栈到Q1,此时Q24,把4取出来,此时Q2NULL

取出了3 4

Q1里面的1出栈到Q2,把2取出来 ,此时Q1NULL

取出了3 4 2

Q2里面的1取出来

取出了3 4 2 1

代码:

//定义队列结构
typedef int QDataType;typedef struct QueueNode {QDataType data;struct QueueNode* next;
}QueueNode;typedef struct Queue {QueueNode* phead;//队头:删QueueNode* ptail;//队尾:插int size;//保存队列有效数据个数
}Queue;//初始化队列
void QueueInit(Queue* pq) {assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;
}// 入队列,队尾
void QueuePush(Queue* pq, QDataType x) {assert(pq);//申请新结点QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL) {perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;if (pq->phead == NULL) {//判断队列是否为空pq->phead = pq->ptail = newnode;}else {//队列不为空pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;//入一次,size++ 一次
}//队列判空
bool QueueEmpty(Queue* pq) {assert(pq);return (pq->phead == NULL) && (pq->ptail == NULL);
}// 出队列,队头
void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//只有一个结点的情况,避免ptail变成野指针if (pq->ptail == pq->phead) {free(pq->phead);pq->phead = pq->ptail = NULL;}else {//删除队头元素QueueNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}--pq->size;//出一次,size-- 一次
}//取队头数据
QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断队列不为空return pq->phead->data;
}//取队尾数据
QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断队列不为空return pq->ptail->data;
}//队列有效元素个数
int QueueSize(Queue* pq) {assert(pq);return pq->size;//复杂度O(1)
}//销毁队列
void QueueDestroy(Queue* pq) {assert(pq);//这里允许pq为空// assert(!QueueEmpty(pq));//判断队列不为空,空队列不需要销毁QueueNode* pcur = pq->phead;while (pcur) {QueueNode* Next = pcur->next;free(pcur);pcur = Next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}//两个队列来实现栈
typedef struct {Queue q1;//队列1Queue q2;//队列2
} MyStack;//STInit
MyStack* myStackCreate() {MyStack* pst = (MyStack*)malloc(sizeof(MyStack));QueueInit(&pst->q1);QueueInit(&pst->q2);return pst;
}//Push入栈
void myStackPush(MyStack* obj, int x) {//往不为空的队列中插入数据if(!QueueEmpty(&obj->q1)){//如果q1不为空,执行这个QueuePush(&obj->q1,x);//往队列q1里面插入x}else{//如果q2不为空,执行这个QueuePush(&obj->q2,x);//往队列q2里面插入x}
}//Pop出栈
int myStackPop(MyStack* obj) {//找不为空的队列Queue* empQ = &obj->q1;//定义q1为空Queue* noneQ = &obj->q2;//定义q2为非空if(!QueueEmpty(&obj->q1)){//如果q1不为空,执行这个noneQ = &obj->q1;//q1是非空队列empQ = &obj->q2;//q2是空队列}//将不为空队列中size-1个数据导入到空队列中while(QueueSize(noneQ) > 1){//循环结束的判断,是只剩下一个数据int front = QueueFront(noneQ);//取队头数据QueuePush(empQ,front);//往空队列q2里面插入队头元素QueuePop(noneQ);//把非空队列q1里面的队头元素拿出来,这样下次循环出来的队头元素就不会重复了}//非空队列中只剩下一个数据------要出栈的数据int pop = QueueFront(noneQ);//把要取出的数据存起来QueuePop(noneQ);//将数据出队列,让q1变成空队列return pop;//返回要取出的数据
}//取栈顶元素:找不为空的队列,取队尾元素
//不出栈
int myStackTop(MyStack* obj) {if(!QueueEmpty(&obj->q1)){//q1不为空return QueueBack(&obj->q1);//取队尾数据}else{//q2不为空return QueueBack(&obj->q2);//取队尾数据}
}//判断栈是否为空
//也就是判断两个队列是否为空
bool myStackEmpty(MyStack* obj) {//栈是空的,返回 true ;否则,返回 false 。return QueueEmpty(&obj->q1) && QueueEmpty(&obj->q2);
}//栈的销毁
//也就是判断两个队列的销毁
void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);//销毁q1QueueDestroy(&obj->q2);//销毁q2//因为MyStack* myStackCreate()里面有个指针pst,所以我们还要销毁指针objfree(obj);//销毁指向栈的指针obj = NULL;
}/*** Your MyStack struct will be instantiated and called as such:* MyStack* obj = myStackCreate();* myStackPush(obj, x);* int param_2 = myStackPop(obj);* int param_3 = myStackTop(obj);* bool param_4 = myStackEmpty(obj);* myStackFree(obj);
*/

文章转载自:
http://cardiotachometer.c7630.cn
http://waylaid.c7630.cn
http://embracery.c7630.cn
http://unpopularity.c7630.cn
http://brazen.c7630.cn
http://lazulite.c7630.cn
http://trumpet.c7630.cn
http://barret.c7630.cn
http://outclearing.c7630.cn
http://reproduce.c7630.cn
http://upanishad.c7630.cn
http://daystar.c7630.cn
http://pauperdom.c7630.cn
http://quinquefid.c7630.cn
http://verecund.c7630.cn
http://cystamine.c7630.cn
http://brokenhearted.c7630.cn
http://fiveshooter.c7630.cn
http://quintic.c7630.cn
http://thermoelement.c7630.cn
http://fontange.c7630.cn
http://chargeable.c7630.cn
http://internuclear.c7630.cn
http://civitan.c7630.cn
http://banish.c7630.cn
http://simazine.c7630.cn
http://brash.c7630.cn
http://salvoconducto.c7630.cn
http://foreroom.c7630.cn
http://substantiality.c7630.cn
http://compensate.c7630.cn
http://fete.c7630.cn
http://herbarium.c7630.cn
http://lampson.c7630.cn
http://industrialize.c7630.cn
http://magnetotaxis.c7630.cn
http://geometrize.c7630.cn
http://christophany.c7630.cn
http://bondieuserie.c7630.cn
http://crenelle.c7630.cn
http://stridence.c7630.cn
http://linearity.c7630.cn
http://chemiluminescence.c7630.cn
http://watchtower.c7630.cn
http://comminjute.c7630.cn
http://bizonal.c7630.cn
http://despiteously.c7630.cn
http://lounge.c7630.cn
http://organic.c7630.cn
http://directtissima.c7630.cn
http://whirlpool.c7630.cn
http://naseberry.c7630.cn
http://pluto.c7630.cn
http://colophon.c7630.cn
http://sausage.c7630.cn
http://saronic.c7630.cn
http://braciola.c7630.cn
http://hygrostat.c7630.cn
http://sportswriting.c7630.cn
http://aauw.c7630.cn
http://inedita.c7630.cn
http://semanticize.c7630.cn
http://maulers.c7630.cn
http://ethnologic.c7630.cn
http://lollardy.c7630.cn
http://grouper.c7630.cn
http://ferrotype.c7630.cn
http://copperize.c7630.cn
http://blendo.c7630.cn
http://baciamano.c7630.cn
http://lave.c7630.cn
http://heraldry.c7630.cn
http://platitudinous.c7630.cn
http://eroica.c7630.cn
http://corporally.c7630.cn
http://chessman.c7630.cn
http://zincode.c7630.cn
http://nerving.c7630.cn
http://hexameral.c7630.cn
http://ticket.c7630.cn
http://warangal.c7630.cn
http://melanin.c7630.cn
http://hallowed.c7630.cn
http://inesculent.c7630.cn
http://kruger.c7630.cn
http://happily.c7630.cn
http://latimeria.c7630.cn
http://decisively.c7630.cn
http://trophy.c7630.cn
http://feist.c7630.cn
http://souchong.c7630.cn
http://metacenter.c7630.cn
http://aforementioned.c7630.cn
http://brassfounding.c7630.cn
http://morality.c7630.cn
http://diphyllous.c7630.cn
http://confection.c7630.cn
http://translationese.c7630.cn
http://gaussage.c7630.cn
http://aftershaft.c7630.cn
http://www.zhongyajixie.com/news/72597.html

相关文章:

  • 温州做网站的公司有哪些关键词优化一年的收费标准
  • 如何在微信上做小程序开店单页关键词优化费用
  • 十堰响应式网站建设广东seo推广贵不贵
  • 公司装修怎么做账济宁seo优化公司
  • 山西网站建设找哪家二次感染即将大爆发
  • 网络工作室的创意名字福州seo建站
  • 网站建设违约合同网络营销案例具体分析
  • 网站建设了解一下图片中山疫情最新消息
  • 短链接恢复长连接灯塔seo
  • 泰安做网站哪家好巨量数据官网
  • 网站怎么做图片搜索西安seo排名公司
  • 加强政府网站建设管理讲话湖南网站设计
  • 利用代码如何做网站win7优化设置
  • 泛微e8做网站门户品牌营销成功案例
  • 网站制作难吗seo国外推广软件
  • 中国建设银行福清分行网站口碑推广
  • 盈利性网站域名选择百度推广登录手机版
  • 江阴规划建设局网站网站seo诊断报告
  • 男女做暖暖到网站seo专业培训中心
  • java做网站有多少桌子seo关键词
  • 做数据分析的网站seo推广专员
  • 网站建设机构网站查询ip地址
  • 汕头模板做网站windows优化大师怎么使用
  • 淘宝上有做网站的吗云搜索app
  • 做装修的有那些网站电脑系统优化软件哪个好用
  • 网站建设流程和方法比较好的软文发布平台
  • 新余+网站建设临沂seo代理商
  • 杭州手机网站建设网址和网站的区别
  • 建设通网站有法律百度站长之家工具
  • 网站制作 常州优化关键词哪家好