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

手机app wap网站模板下载企业品牌营销推广

手机app wap网站模板下载,企业品牌营销推广,网站做新闻外链有作用吗,专业网站建设系统思路 思路:用两个队列实现栈后进先出的特性 ,两个队列为空时,先将数据都导向其中一个队列。 当要模拟出栈时,将前面的元素都导入另一个空队列,再将最后一个元素移出队列 实现 实现: 因为C语言没有库可以…

思路 

思路:用两个队列实现栈后进先出的特性 ,两个队列为空时,先将数据都导向其中一个队列。

 

当要模拟出栈时,将前面的元素都导入另一个空队列,再将最后一个元素移出队列 

实现 

实现: 因为C语言没有库可以现成使用,所以我们将写好的队列导入

 先创建MyStack结构体,包含两个队列结构体。再malloc动态申请MyStack结构体的空间,最后将两个队列传入初始化函数,进行初始化(记得要加上&取地址符号)

 

 压栈过程,我们就先判断队列q1是否为空,如果不为空,则往q1中导入数据(因为不为空,证明前面已经有数据放进去了);如果为空,则证明要么两个队列都是空,要么一开始向q2导入了数据,这时我们就将数据导入队列q2中。

一句话总结:谁有数据就放谁,都无数据放q2(一开始随便放哪个都行,这里我们选择q2) 

 

出栈过程,就分为两个部分。第一个部分,是创建空队列和非空队列指针(因为我们不知道此时q1和q2哪个是空,哪个非空),后面加上判断,如果初始赋值错误,则翻转过来。

第二个部分,就是一开始的核心思路,利用循环,将前面的元素都导入另一个空队列,再获取最后一个元素(注意,每次导入一个元素,就要进行出队操作pop

 

 获取栈顶元素,就是出栈过程删减版,判断完空与非空队列,直接取出非空队列队尾的元素即可

 

 判断栈是否为空,只要当两个队列q1和q2全为空时,栈才为空,返回true,否则返回false

 

最后,释放栈空间,可能有人只写了最后一句也给过了,但是其实这是不对的。正确做法是,先将两个队列都销毁(销毁链表),再将MyStack空间给释放掉,这样才不会造成内存泄漏

 

完整代码附上:

typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;//初始化
void QueueInit(Queue* pq);
//销毁
void QueueDestroy(Queue* pq);
//入队
void QueuePush(Queue* pq, QDataType x);
//出队
void QueuePop(Queue* pq);
//获取队头元素
QDataType QueueFront(Queue* pq);
//获取队尾元素
QDataType QueueBack(Queue* pq);
//检测队列中有效元素个数
int QueueSize(Queue* pq);
//检测队列是否为空
bool QueueEmpty(Queue* pq);void QueueInit(Queue* pq)
{assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;pq->size = 0;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");return;}newnode->data = x;newnode->next = NULL;if (pq->ptail == NULL){assert(pq->phead == NULL);pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq->phead->next == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}QDataType QueueFront(Queue* pq)
{assert(pq);return pq->phead->data;
}QDataType QueueBack(Queue* pq)
{assert(pq);return pq->ptail->data;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}typedef struct {Queue q1;Queue q2;
} MyStack;MyStack* myStackCreate() {MyStack* obj = (MyStack*)malloc(sizeof(MyStack));if (obj == NULL){perror("malloc fail");return NULL;}QueueInit(&obj->q1);QueueInit(&obj->q2);return obj;
}void myStackPush(MyStack* obj, int x) {if (!QueueEmpty(&obj->q1)){QueuePush(&obj->q1, x);}else{QueuePush(&obj->q2, x);}
}int myStackPop(MyStack* obj) {Queue* pEmptyQ = &obj->q1;Queue* pNonEmptyQ = &obj->q2;if (!QueueEmpty(&obj->q1)){pEmptyQ = &obj->q2;pNonEmptyQ = &obj->q1;}while (QueueSize(pNonEmptyQ) > 1){QueuePush(pEmptyQ, QueueFront(pNonEmptyQ));QueuePop(pNonEmptyQ);}int top = QueueFront(pNonEmptyQ);QueuePop(pNonEmptyQ);return top;
}int myStackTop(MyStack* obj) {Queue* pEmptyQ = &obj->q1;Queue* pNonEmptyQ = &obj->q2;if (!QueueEmpty(&obj->q1)){pEmptyQ = &obj->q2;pNonEmptyQ = &obj->q1;}int top = QueueBack(pNonEmptyQ);return top;
}bool myStackEmpty(MyStack* obj) {return QueueEmpty(&obj->q1)&& QueueEmpty(&obj->q2);
}void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}/*** 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://www.yidumall.com/news/27089.html

相关文章:

  • 做网站的流程知乎seo流量的提升的软件
  • 网站域名代办南京网络推广优化哪家好
  • 企业网站和政府网站有什么区别大学生网络营销策划方案书
  • b2c网上交易平台有哪些seo推广要多少钱
  • html5做网站深圳全网推广服务
  • 网站怎么架设谷歌网站推广优化
  • 自己做网站 赚钱山东疫情最新情况
  • dw网站建设素材cba最新消息
  • 高端网站建设系统规划东莞疫情最新数据
  • 网站开发设备费用计入什么科目网站seo谷歌
  • 建设工程规范在哪个网站下载宁波seo外包费用
  • 快速做网站服务好宁波seo排名优化价格
  • app开发定制公司如何选择徐州seo公司
  • 台州知名网站湖南网站设计外包服务
  • 网站快捷导航ie怎么做郑州关键词优化顾问
  • 北京学生做兼职的网站惠州seo排名外包
  • 做动漫网站的意义企业网络营销青岛
  • 360站长工具seo百度云网盘网页版登录
  • 有没有做语文题的网站外贸平台排行榜前十名
  • 买完域名后如何建设网站网站关键词优化办法
  • 创业做社交网站哪里做网站便宜
  • 做网站建设公司赚钱seo监控系统
  • 中铁建设集团最新门户网登录seo排名点击器原理
  • 网站开发的步骤英语seo
  • 建网站app需要多少钱整合营销什么意思
  • 毕业论文学校网站建设黄冈网站推广软件有哪些
  • wordpress4.6手册 chm天津seo
  • 如何渗透wordpress的网站带佣金的旅游推广平台有哪些
  • 可以做翻译兼职的网站有哪些重庆森林经典台词梁朝伟
  • 制作网站的代码网络竞价推广托管公司