日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-线性表之用队列实现栈用栈实现队列

發(fā)布時(shí)間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-线性表之用队列实现栈用栈实现队列 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • **********用隊(duì)列實(shí)現(xiàn)棧
  • 一:思路
  • 二:實(shí)現(xiàn)
    • (1)結(jié)構(gòu)體定義
    • (2)初始化和銷(xiāo)毀
    • (3)進(jìn)“棧”
    • (4)出“棧”
  • 三:代碼
    • **********用棧實(shí)現(xiàn)隊(duì)列
    • (1)思路
    • (2)實(shí)現(xiàn)
    • (3)代碼

**********用隊(duì)列實(shí)現(xiàn)棧

一:思路


二:實(shí)現(xiàn)

(1)結(jié)構(gòu)體定義

(2)初始化和銷(xiāo)毀

注意:在測(cè)試文件外新建一個(gè)Mystack結(jié)構(gòu)體時(shí),不能只有一句Mystack ms,因?yàn)槭褂藐?duì)列實(shí)現(xiàn)棧,那么該棧的底層是隊(duì)列,所以必須同時(shí)要?jiǎng)?chuàng)建隊(duì)列結(jié)構(gòu)體,然后進(jìn)行賦值才可以

(3)進(jìn)“棧”

注意:進(jìn)棧和出棧本質(zhì)是在操作隊(duì)列,所以這里僅僅使用的隊(duì)列操作的接口,如果想要了解隊(duì)列的出隊(duì)和入隊(duì)操作,請(qǐng)看:

數(shù)據(jù)結(jié)構(gòu)-線性表之棧和隊(duì)列

(4)出“棧”

三:代碼

QueueToStack.h

#pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int DataType;typedef struct QNode {DataType _val;struct QNode* _next; }QNode;typedef struct Queue {QNode* _front;QNode* _rear; }Queue;typedef struct MyStack {Queue* _q1;//儲(chǔ)備元素的棧Queue* _q2;//進(jìn)元素的棧 }MyStack;void MyStackInit(MyStack* ps); void MyStackPush(MyStack* ps, DataType x);//進(jìn)棧 DataType MystackPop(MyStack* ps);//出棧

QueueToStack.c

#include "QueueToStack.h"void MyStackInit(MyStack* ps) {assert(ps);ps->_q1->_front = NULL;ps->_q1->_rear = NULL;ps->_q2->_front = NULL;ps->_q2->_rear = NULL;printf("初始化成功\n"); } void MystackDestory(MyStack* ps) {assert(ps);//釋放儲(chǔ)存棧QNode* cur = ps->_q1->_front;QNode* pre;while (cur){pre = cur;cur = cur->_next;free(pre);}free(ps); }//入隊(duì) void QueuePush(Queue* pq, DataType x) {assert(pq);QNode* NewNode = (QNode*)malloc(sizeof(QNode));NewNode->_val = x;NewNode->_next = NULL;if (pq->_rear == NULL){pq->_rear = NewNode;pq->_front = NewNode;}else{pq->_rear->_next = NewNode;pq->_rear = NewNode;} }// //出隊(duì) DataType QueuePop(Queue* pq) {assert(pq);if (pq->_front == pq->_rear){DataType rec = pq->_front->_val;free(pq->_rear);pq->_rear = NULL;pq->_front = NULL;return rec;}else{QNode* cur = pq->_front;pq->_front = pq->_front->_next;return cur->_val;free(cur);} }void MyStackPush(MyStack* ps,DataType x) {//如果隊(duì)列1不空就先把隊(duì)列1中的元素出隊(duì)列然后進(jìn)入隊(duì)列2if (ps->_q1->_front != NULL){DataType save = QueuePop(ps->_q1);//出隊(duì)列1QueuePush(ps->_q2,save);//進(jìn)隊(duì)列2}QueuePush(ps->_q2, x);//而后在正常進(jìn)“棧” }DataType MystackPop(MyStack* ps) {if (ps->_q2->_front == NULL && ps->_q1->_front !=NULL)//如果隊(duì)列2為空,隊(duì)列1不空,將隊(duì)1所有元素出隊(duì)1,依次進(jìn)隊(duì)2{while (ps->_q1->_front){DataType save = QueuePop(ps->_q1);QueuePush(ps->_q2, save);}}//出“棧”時(shí),第一個(gè)元素就是隊(duì)列2的尾元素while(ps->_q2->_front!=ps->_q2->_rear)//出隊(duì)2直到隊(duì)列2剩余最后一個(gè)元素{DataType save = QueuePop(ps->_q2);QueuePush(ps->_q1, save);}DataType rec = QueuePop(ps->_q2);return rec; }

test.c

#include "QueueToStack.h"void test() {MyStack ms;Queue q1;Queue q2;ms._q1 = &q1;ms._q2 = &q2;MyStackInit(&ms);MyStackPush(&ms, 1);MyStackPush(&ms, 2);MyStackPush(&ms, 3);MyStackPush(&ms, 4);MyStackPush(&ms, 5);printf("%d ", MystackPop(&ms));printf("%d ", MystackPop(&ms));printf("%d ", MystackPop(&ms));printf("%d ", MystackPop(&ms));printf("%d ", MystackPop(&ms)); } int main() {test(); }

**********用棧實(shí)現(xiàn)隊(duì)列

(1)思路

(2)實(shí)現(xiàn)

1:結(jié)構(gòu)體定義


2:初始化

注意:下面的入隊(duì)和出隊(duì)要使用到入棧和出棧的接口

DataType StackPop(Stack* ps)//出棧 {assert(ps);if (ps->_top == -1){printf("棧空格\n");exit(-1);}DataType rec = ps->_arr[ps->_top];ps->_top--;return rec; } void StackPush(Stack* ps, DataType x)//入棧 {assert(ps);if (ps->_top == ps->_capacity - 1){ps->_capacity *= 2;DataType* temp = (DataType)realloc(ps->_arr, sizeof(DataType)*ps->_capacity);ps->_arr = temp;}ps->_top++;ps->_arr[ps->_top] = x; }

3:入“隊(duì)”和出“隊(duì)”

(3)代碼

StackToQueue.h

#pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int DataType;typedef struct {DataType* _arr;int _top;int _capacity;}Stack; typedef struct MyQueue {Stack* _S1;Stack* _S2;}MyQueue;void MyQueueInit(MyQueue* pq);//初始化 void MyQueuePush(MyQueue*pq, DataType x);//入“隊(duì)” DataType MyQueuePop(MyQueue* pq);//出“隊(duì)”

StackToQueue.c

#pragma once #include "StackToQueue.h"void MyQueueInit(MyQueue* pq) {assert(pq);assert(pq->_S1);assert(pq->_S2);pq->_S1->_arr = (DataType*)malloc(sizeof(DataType)*4);pq->_S1->_top = -1;pq->_S1->_capacity = 4;pq->_S2->_arr = (DataType*)malloc(sizeof(DataType) * 4);pq->_S2->_top = -1;pq->_S2->_capacity = 4; }DataType StackPop(Stack* ps)//出棧 {assert(ps);if (ps->_top == -1){printf("棧空格\n");exit(-1);}DataType rec = ps->_arr[ps->_top];ps->_top--;return rec; } void StackPush(Stack* ps, DataType x)//入棧 {assert(ps);if (ps->_top == ps->_capacity - 1){ps->_capacity *= 2;DataType* temp = (DataType)realloc(ps->_arr, sizeof(DataType)*ps->_capacity);ps->_arr = temp;}ps->_top++;ps->_arr[ps->_top] = x; }void MyQueuePush(MyQueue*pq, DataType x) {StackPush(pq->_S1, x);} DataType MyQueuePop(MyQueue* pq) {while (pq->_S1->_top != -1){DataType save = StackPop(pq->_S1);StackPush(pq->_S2,save);}DataType rec= StackPop(pq->_S2);while (pq->_S2->_top != -1){DataType save = StackPop(pq->_S2);StackPush(pq->_S1, save);}return rec; }

3:test.c

#pragma once #include "StackToQueue.h"void test() {MyQueue q;Stack s1;Stack s2;q._S1 = &s1;q._S2 = &s2;MyQueueInit(&q);MyQueuePush(&q, 1);MyQueuePush(&q, 2);MyQueuePop(&q);MyQueuePush(&q, 3);printf("%d ", MyQueuePop(&q));printf("%d ", MyQueuePop(&q)); }

總結(jié)

以上是生活随笔為你收集整理的数据结构-线性表之用队列实现栈用栈实现队列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产乱码久久久久久88av | 亚洲欧美另类在线视频 | 日韩日日夜夜 | 精品成人一区二区三区久久精品 | 中文字幕第一页亚洲 | 国产日韩一区二区三区在线观看 | 中文字幕在线观看日本 | 日本伦理中文字幕 | 天天久久综合网 | 91漂亮少妇露脸在线播放 | 无码h黄肉3d动漫在线观看 | 老头老太吃奶xb视频 | 国产午夜伦理 | 成人免费视频一区 | 白峰美羽在线播放 | av大全在线观看 | 加勒比波多野结衣 | 日本夜夜操 | 欧美久久久久久又粗又大 | 色吟av| 国产一区二区在线电影 | 黄色69视频| 精品午夜久久 | 国产精品视频大全 | 少妇一级淫片免费观看 | 亚洲国产精品99久久久久久久久 | 男女视频在线观看免费 | 九色免费视频 | 性高潮久久久久久久久 | 国产制服91一区二区三区制服 | 少妇喷水在线观看 | 久久久久久久久久一区二区三区 | 丝袜脚交免费网站xx | 亚洲高清在线播放 | 中国极品少妇xxxx | 天天干夜夜想 | 男女在线免费观看 | 91在线一区二区三区 | 光棍影院av | 亚洲一区 中文字幕 | 日韩三级在线观看 | 午夜寂寞影院在线观看 | 精品人妻人人做人人爽夜夜爽 | 日韩在线影院 | 波多野结衣在线 | 9i看片成人免费看片 | 久久精品一区二区 | 天天干天天添 | 在线黄色免费 | 日韩特黄一级片 | 国产av国片偷人妻麻豆 | 情欲超 | 欧美天天性 | 久久精品店 | 91精品国自产在线 | 高跟鞋和丝袜猛烈xxxxxx | 97人人爽人人爽人人爽人人爽 | 国产无套内射又大又猛又粗又爽 | 欧美专区第二页 | 亚洲自拍偷拍一区二区三区 | 老妇裸体性猛交视频 | 天天插插 | 欧美成人女星 | 三上悠亚久久精品 | 久久久久久蜜桃一区二区 | 91网址在线 | 国产乱淫片视频 | 黄色国产视频网站 | 91麻豆免费看 | 黄色电影在线视频 | 黄色av免费播放 | 成人福利一区二区 | 色.www| 国产suv精品一区二区四 | 黄色一级大片在线免费看产 | 国产69视频在线观看 | 色国产精品 | 69人人 | 亚洲精品乱码久久久久久久 | 九色国产在线 | 涩涩五月天 | 欧美成人专区 | 麻豆md0049免费| 国产色片| 久久丝袜视频 | 午夜91视频| 黄色免费入口 | 天天摸天天做天天爽水多 | 久久久91精品国产一区二区三区 | 蜜臀av在线免费观看 | 91精品啪在线观看国产 | 一级视频在线免费观看 | 青草青在线 | 久久精品一区二区三区不卡牛牛 | 亚洲精品久久久久久一区二区 | 国产日韩在线观看视频 | 91中文字幕| 亚洲成人精品网 | 92av视频 |