筆試大題20分值(用兩個棧實現隊列)

目錄

  • 前言
  • 一、原題
  • 二、解題思路
  • 三、代碼實現(c/c++)
    • C語言代碼
    • C++代碼實現
  • 結語

前言

目前博主在處于秋招求職的關鍵時期,在暑假這段時間會頻繁更新博客,想在暑假期間把一些常考的面試和筆試題過一下,利用這兩個月沉淀一下技術,做出一,兩個比較大的項目,然后就是封裝一下簡歷,開始投遞了,我期待與26屆所有畢業生一起學習共同進步。

在這里插入圖片描述

一、原題

在這里插入圖片描述

二、解題思路

1.s1用作入隊棧,s2用作出隊棧。

2.s1入隊時,判斷兩個棧是否棧滿了,如果滿就算入隊失敗;如果s1滿了,就將s1里的元素出棧入棧到s2,同時也要判斷s2是否滿了,如果滿了就結束s1出棧,s2入棧這個操作,最后s1插入元素。

3.s2出隊時,判斷兩個棧是否為空,如果為空就出隊失敗;如果s2為空,就將s1所有元素出棧入棧到s2,最后出棧元素。

三、代碼實現(c/c++)

C語言代碼

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>#define MaxSize 10
typedef int DataType_t;typedef struct {DataType_t data[MaxSize];size_t top;
} Stack;typedef struct {Stack s1;Stack s2;
} Queue;void InitStack(Stack* stack) {stack->top = 0;
}bool IsFull(Stack* stack) {return stack->top == MaxSize;
}bool IsEmpty(Stack* stack) {return stack->top == 0;
}bool Push(Stack* stack, DataType_t val) {if (IsFull(stack)) {printf("棧滿,插入元素失敗\n");return false;}stack->data[stack->top++] = val;return true;
}bool Pop(Stack* stack, DataType_t* val) {if (IsEmpty(stack)) {printf("棧空,彈出元素失敗\n");return false;}*val = stack->data[--stack->top];return true;
}void InitQueue(Queue* queue) {InitStack(&queue->s1);InitStack(&queue->s2);
}bool IsQueueEmpty(Queue* queue) {return IsEmpty(&queue->s1) && IsEmpty(&queue->s2);
}bool IsQueueFull(Queue* queue) {return (queue->s1.top + queue->s2.top) == MaxSize;
}bool Enque(Queue* queue, DataType_t val) {if (IsQueueFull(queue)) {printf("隊滿,入隊失敗\n");return false;}DataType_t temp;if (IsFull(&queue->s1)) {while (!IsEmpty(&queue->s1) && !IsFull(&queue->s2)) {Pop(&queue->s1, &temp);Push(&queue->s2, temp);}}return Push(&queue->s1, val);
}bool Deque(Queue* queue, DataType_t* val) {if (IsQueueEmpty(queue)) {printf("隊空,出隊失敗\n");return false;}DataType_t temp;if (IsEmpty(&queue->s2)) {while (!IsEmpty(&queue->s1)) {Pop(&queue->s1, &temp);Push(&queue->s2, temp);}}return Pop(&queue->s2, val);
}

C++代碼實現

#include <iostream>
using namespace std;const int MAX_SIZE = 100; // 棧的最大容量// 棧結構定義
struct Stack {int data[MAX_SIZE];int top = -1; // 棧頂指針,初始為-1
};// 棧操作函數
void push(Stack &ST, int x) {if (ST.top < MAX_SIZE - 1) {ST.data[++ST.top] = x; // 棧頂指針先加1,再入棧}
}bool pop(Stack &ST, int &x) {if (ST.top == -1) return false; // 棧空,彈出失敗x = ST.data[ST.top--]; // 取棧頂元素,指針減1return true;
}bool isEmpty(Stack &ST) {return ST.top == -1; // 棧空返回 true
}// 隊列結構(由兩個棧組成)
struct Queue {Stack s1, s2;
};// 元素入隊列
bool enQueue(Queue &q, int x) {if (q.s1.top == MAX_SIZE - 1) {// s1 已滿,嘗試轉移元素到 s2if (!isEmpty(q.s2)) return false; // s2 非空,隊列滿,入隊失敗// 將 s1 的所有元素轉移到 s2(逆序)while (!isEmpty(q.s1)) {int temp;pop(q.s1, temp);push(q.s2, temp);}}push(q.s1, x); // 新元素壓入 s1return true;
}// 元素出隊列
bool deQueue(Queue &q, int &x) {if (!isEmpty(q.s2)) { // s2 非空,直接彈出pop(q.s2, x);return true;}// s2 為空,轉移 s1 的元素到 s2while (!isEmpty(q.s1)) {int temp;pop(q.s1, temp);push(q.s2, temp);}if (isEmpty(q.s2)) return false; // 轉移后仍為空,隊列空pop(q.s2, x); // 彈出 s2 棧頂(即隊首)return true;
}// 判斷隊列是否為空
bool queueEmpty(Queue &q) {return isEmpty(q.s1) && isEmpty(q.s2); // 兩棧均空時隊列為空
}int main() {Queue q;// 測試用例enQueue(q, 1);enQueue(q, 2);enQueue(q, 3);int x;deQueue(q, x); // 輸出 1cout << "Dequeued: " << x << endl;deQueue(q, x); // 輸出 2cout << "Dequeued: " << x << endl;cout << "Queue empty? " << queueEmpty(q) << endl; // 輸出 0(非空)return 0;
}

結語

在做項目之前,我們的基礎一定要打扎實,尤其是,這些簡單的線性數據結構,你們學到后面會發現,好多存儲結構都逃不掉,順序存儲結構和鏈式存儲結構,一定要自己動手多敲,只有腦子有料,到后面做項目才會得心應手,否則你到后面根本學不下。

在這里插入圖片描述

希望各位靚仔靚女點贊,收藏,關注多多支持,我們共同進步,后續我會更新更多的面試真題,你們的支持將是我前進最大的動力。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915270.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【知識掃盲】tokenizer.json中的vocab和merges是什么?

在自然語言處理里&#xff0c;tokenizer.json 文件一般是由 Hugging Face 的 Tokenizers 庫生成的&#xff0c;它是分詞器配置的核心文件。這里面的 vocab 和 merges 是子詞分詞算法&#xff08;像 BPE 這種&#xff09;的重要構成要素。下面為你詳細解釋它們的作用和工作原理&…

【安卓筆記】RxJava的Hook機制,整體攔截器

0. 環境&#xff1a; 電腦&#xff1a;Windows10 Android Studio: 2024.3.2 編程語言: Java Gradle version&#xff1a;8.11.1 Compile Sdk Version&#xff1a;35 Java 版本&#xff1a;Java11 1. 使用場景 整個項目都是用了RxJava&#xff0c;需要對 整個/部分 項目…

NX二次開發常用函數——從一個坐標系到另一個坐標系的轉換(UF_MTX4_csys_to_csys )相同體坐標轉化

再做項目時相信大家都會用到坐標轉化,例如,我之前寫的案例分享中的博客都用到過,之前總是找借口進行if else判斷,雖然可以實現,但是比起坐標變換無論代碼復雜程度還是運行速度都比較差,之前參加過曹大師的教學訓練營,但是明顯感覺到大佬寫代碼的邏輯性以及模塊化能力都比…

數據庫防止數組字符串序列化

請求接到數組["aa","bb"]后,后端需要轉換成字符串Java 8 使用 String.join()String[] arr {"aa", "bb"}; String str String.join(",", arr); // "aa,bb"如果采用其他轉換,在字段存入數據庫后會["\"a…

若依框架文件上傳返回路徑端口錯誤 - Nginx代理環境下serverConfig.getUrl()獲取端口異常

目錄一 、問題描述二、問題現象三、問題根本原因3.1 代碼分析3.2 問題核心四、解決方案五、總結一 、問題描述 在使用若依框架進行項目開發時&#xff0c;遇到了一個令人困擾的問題&#xff1a;文件上傳功能在本地開發環境運行正常&#xff0c;但部署到服務器后&#xff0c;上…

使用PyInstaller打包 Python 工程

引言:大模型是個好工具,盡管好多內容都是拼湊的,但是整理學到的就是自己的。因工作需要隱藏python源代碼,方法有PyInstaller 、Cpython等多種方法,PyInstaller更為常用,PyInstaller打包 Python 工程步驟整理如下: 一、確保系統環境準備就緒 安裝 Python 和 pip 確認版本…

Python 程序設計講義(1):PyCharm 安裝教程

Python 程序設計講義&#xff08;1&#xff09;&#xff1a;PyCharm 安裝教程 一、安裝 Python 解釋器 1、下載 Python 安裝文件 點擊如下鏈接進入 Python 官網&#xff1a; https://www.python.org/ 在彈出的頁面中單擊【Downloads】&#xff0c;然后單擊下面的【Download Pyt…

uniapp云打包安卓

1、基礎云打包 2、修改logo3、怎么實現下拉菜單4、修改啟動頁啟動頁默認這樣 5、URL Scheme頁面跳轉

Python----NLP自然語言處理(英文分詞器--NLTK)

一、NLTK_介紹NLTK&#xff08;Natural Language Toolkit&#xff0c;自然語言處理工具包&#xff09;&#xff0c;一個主要用于清洗和處理英文文本的Python工具包。它有很多的功能&#xff0c;我們主要使用的是它的分詞功能&#xff0c;之前講過中文分詞是比較復雜的&#xff…

傳統瀏覽器過時了?Dia如何用AI重新定義上網體驗

歡迎來到我的博客&#xff0c;代碼的世界里&#xff0c;每一行都是一個故事&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交給時間 &#x1f3e0; &#xff1a;小破站 傳統瀏覽器過時了&#xff1f;Dia如何用AI重新定義上網體驗它是什么核心功能搜索編程左右互動感謝…

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現

基于DTLC-AEC與DTLN的輕量級實時語音增強系統設計與實現 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 1. 引言 在當今的互聯網通信時代,實時語音通信已成為人們日常生活中不可或缺的一部分。然而,語音通信質量常…

Attu-Milvus向量數據庫可視化工具

本文介紹了如何安裝可視化工具Attu&#xff0c;包括使用Docker鏡像啟動并訪問Attu服務。 目錄 前言 一、Attu安裝 1. Docker容器安裝 2. 桌面程序安裝 二、使用 Milvus Web U 前言 Attu是一款專為Milvus向量數據庫打造的開源數據庫管理工具&#xff0c;提供了便捷的圖形化…

高效檢測數據突變的MDAM算法詳解

在數據分析領域&#xff0c;我們經常需要檢測數據序列中的異常變化。今天給大家介紹一種簡單但非常有效的算法——MDAM (Mean Drift Accumulation Monitor)&#xff0c;它能幫你輕松發現數據中的均值突變現象&#xff01;1. &#x1f50d; 算法原理累計數均值突變檢測算法(MDAM…

記錄一道sql面試題3

題目&#xff1a;有一張表a,和一張表ba:id age name1 18 kethy2 32 kavin3 22 tonyb:id dept description2 sale today2 dev sunday提問&#xff1a;將a和b兩張表左連接查詢&#xff0c;條件是a.id b.id會得到什么結果。查詢的字段為a.*,b.* 。說明&#xff1a;左表 a 中 id1 …

linux系統------LVS+KeepAlived+Nginx高可用方案

目錄 一、環境搭建 1.環境準備 2.安裝ipvsadm 和 安裝 keepalived&#xff08;Lvs服務器&#xff09; 3.為兩臺RS配置虛擬ip&#xff08;nginx服務器&#xff09; 1.配置虛擬網絡子接口&#xff08;回環接口&#xff09; 2.修改內容如下: 3.配置ARP 二、KeepalivedLvsN…

【MySQL】性能優化實戰指南:釋放數據庫潛能的藝術

文章目錄MySQL性能優化實戰指南&#xff1a;釋放數據庫潛能的藝術&#x1f680; 引言為什么需要MySQL性能優化&#xff1f;&#x1f4cb; 性能優化基礎知識MySQL性能瓶頸分析1. 硬件資源瓶頸2. MySQL內部瓶頸&#x1f3c6; 優化配置策略大全&#x1f4be; 內存配置優化InnoDB緩…

Unity 3D碰撞器

在Unity中&#xff0c;碰撞器&#xff08;Collider&#xff09;是用于檢測物體之間碰撞的組件&#xff0c;它們定義了物體的物理邊界。碰撞器與剛體&#xff08;Rigidbody&#xff09;配合使用&#xff0c;實現物理模擬。下面我將按您的要求&#xff0c;從碰撞器的種類、常用參…

Windows批處理實現帶時間戳ping

windows環境 &#xff0c; 將以下代碼保存為 .bat文件 echo off echo.---------------------------------------------------------- echo.----------------------------------------------------------- echo off set /p hostplease input your destination ip : set logfi…

GeoPandas 城市規劃:Python 空間數據初學者指南

安裝和設置 在深入研究數據之前&#xff0c;我們需要準備好工具。設置 GeoPandas 及其必要的依賴項是第一步。 我們將在 Google Colab 中完成此操作。 !pip install geopandas contextily matplotlib 空間數據有多種格式&#xff0c;但 GeoJSON 是常見且易于訪問的格式。Ge…

力扣面試150題--環形子數組的最大和

Day 80 題目描述思路 初次做法&#xff1a;在昨天代碼的基礎上修改 計算普通子數組的最大和 使用動態規劃計算以每個位置為起點的最大子數組和&#xff08;存儲在 val 中&#xff09;&#xff0c;并更新全局最大值 rightmax。計算后綴和與前綴和 sum[i]&#xff1a;從位置 i 到…