實驗二 棧和佇列——順序棧、順序佇列
棧是什麼?
棧是一種結構,也是一種方式。
棧代表著“後進先出”,我是這麼理解的(如圖)
就像是放在試管裡的雞蛋,新放進去的雞蛋肯定是在最上層,想拿走的話只能從最上層一個個拿,這種方式叫做棧。
以下是百度百科的解釋,用以對比。
棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
接下來看題目中,棧的定義
typedef int ElemType;
struct StackRecord;
typedef struct StackRecord *Stack;
struct StackRecord
{
int Capacity; //棧容量
int Top; //棧頂,初始為-1。
ElemType *Array;
};
棧頂初始為-1,有第一個元素時直接++就行了,Top=0,此時Capacity=1.
2488 括號匹配可以百度搜索,是一道很經典的題,具體解法和思路都有的
2489 字尾表示式求值 和樹的內容有關,可以等學了樹以後再來做這題
這題實現是很簡單,但是要確切明白原理不容易(不寫是因為我也不是很懂_(:з」∠)_),步驟如下:
1:if(輸入是數字) 則存入棧中
else(是運算子) 取出棧頂兩個元素,按運算子計算,將結果存入棧中
2:重複1的步驟,直至輸入停止
注意此方法只適用於 確保輸入合法 的情況
2277 棧的建立
2280 元素進棧Stack CreateStack(int MaxElements) { Stack s = (StackRecord *)malloc(sizeof(StackRecord)); s->Top = -1; s->Capacity = MaxElements; s->Array=(int *)malloc(sizeof(int)*s->Capacity); return s; }
做的時候很容易 直接把Top拿來當常量用 ,注意應該是 S->Top 。
void Push(Stack S, ElemType x)
{
if (S->Top + 1 == S->Capacity) return;
S->Top++;
S->Array[S->Top] = x;
}
隊比棧更符合正常思維,所以更好理解。
隊就像排隊,進來只能放在隊尾,出去只能從隊首出去,那麼隊中間的呢?就慢慢等咯
做了連結串列、棧再做隊就會覺得比較輕鬆
佇列置空時注意把所有引數都回到初始值。
//2249
void MakeEmpty(Queue Q)
{
int i = Q->Front;
for (; i <= Q->Rear; i++)
Q->Array[i] = 0;
Q->Size = 0;
Q->Front = 0;
Q->Rear = -1;
}
//2294 佇列建立時,先給隊結構L申請空間,再按照給定的最大容量申請 array陣列的空間
Queue CreateQueue(int MaxElements)
{
Queue L = (Queue)malloc(sizeof(QueueRecord));
L->Capacity = MaxElements;
L->Array = (ElemType *)malloc(sizeof(ElemType)*L->Capacity);
L->Front = 0;
L->Rear = -1;
L->Size = 0;
return L;
}
2298 元素入隊
void Enqueue(Queue Q, ElemType X)
{
if (Q->Capacity == Q->Size) return;
Q->Rear++;
Q->Array[Q->Rear] = X;
Q->Size++;
}
相關推薦
Java的順序棧和鏈式棧
urn implement public 可能 object 指定大小 常數 額外 異常 棧的定義 棧是限制在表的一段進行插入和刪除的運算的線性表,通常能夠將插入、刪除的一端為棧頂,例外一端稱為棧底,當表中沒有任何元素的時候稱為空棧。 通常刪除(又稱“退棧”)叫做彈出pop
Java程式碼實現順序棧和鏈式棧
Java程式碼實現順序棧和鏈式棧 棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入或者刪除運算。後進先出(Last In First Out)。 棧中的資料操作主要有push(壓入)和pop(彈出)操作。 實際上,棧就可以用陣列來實現,也可
資料結構筆記之用C++實現順序棧和鏈式棧
這裡介紹兩種實現棧的方式:“順序棧”和“鏈式棧”,各有各的優缺點。 不管是“順序棧”還是“鏈式棧”,我們可以先定義一個棧的ADT(抽象資料型別),如下面的“stack.h” #ifndef STACK_H #define STACK_H const int
c++順序棧和鏈式棧的實現
基本定義: 棧(Stack)是n個元素a1,a2,…an,組成的有限序列,記作S =(a1,a2,…,an),並且只能在一端插入和刪除元素,n=0時稱為空棧。棧的特徵: 由於棧只能從一端插入和刪除元素,故棧具有後進先出(Last in,first out,LIFO)的特性。
Linux虛擬地址空間布局以及進程棧和線程棧總結(轉)
開始 系統初始 後來 文本 lov fault 和數 ps命令 變量大小 一:Linux虛擬地址空間布局 (轉自:Linux虛擬地址空間布局) 在多任務操作系統中,每個進程都運行在屬於自己的內存沙盤中。這個沙盤就是虛擬地址空間(Virtual Address Spac
Java虛擬機器棧和本地方法棧
java虛擬機器棧由棧幀組成,幀中儲存方法的執行狀態,包括區域性變量表和運算元棧等。在任一時刻,某一執行緒肯定是在執行某個方法。這個方法叫做該執行緒的當前方法;執行該方法的幀叫做執行緒的當前幀;宣告該方法的類叫做當前類。如果當前方法是java方法,則pc暫存器中存放當前正在執行的java虛擬機器指令
實驗二(和201521410030一組)
中國人民公安大學 Chinese people’ public security university 網路對抗技術 實驗報告 實驗二 網路嗅探與欺騙
實驗二 資料庫和表的建立與管理
實驗二 資料庫和表的建立與管理 建立用於企業管理的員工管理資料庫,資料庫名為YGGL中,YGGL資料庫中包括三個表:Employees(員工資訊表)、Departments(部門資訊表)、Salary(員工薪水情況表)。各表的結構如下表: 表1 Empl
佇列---基本概念、順序佇列
一、基本概念 佇列(Queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。 佇列是一種先進先出(First In First Out)的線性表,簡稱FIFO。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。 佇列基本操作: Init
Joseph環(順序表、鏈佇列)
1.順序表 #include<stdio.h> void Joseph(int str[][2],int m,int n); int main() { int m,n,i; //n表示環長,m表示是密碼 int
Linux 程序棧和執行緒棧的區別
注:本文所涉及的環境為Linux, 下文討論的棧跟核心棧,沒有任何的關係,關於核心棧,請參考《深入Linux核心架構》中的2.4.1 程序複製 這裡有如下幾個問題,執行緒棧的空間是開闢在那裡的? 執行緒棧之間可以互訪嗎?為什麼在使用pthread_attr_setstack
Java虛擬機器OOM之虛擬機器棧和本地方法棧溢位(4)
一、在 Java 虛擬機器規範中,對虛擬機器棧這個區域規定了兩種異常狀況: (1)如果執行緒請求的棧深度大於虛擬機器所允許的深度,將丟擲StackOverflowError 異常; (2)如果虛擬機器棧可以動態擴充套件(當前大部分的 Java 虛擬機器都可動
資料結構(三)——佇列及實現、迴圈佇列實現
一、佇列 佇列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇
實驗二 棧和佇列——順序棧、順序佇列
棧是什麼? 棧是一種結構,也是一種方式。 棧代表著“後進先出”,我是這麼理解的(如圖) 就像是放在試管裡的雞蛋,新放進去的雞蛋肯定是在最上層,想拿走的話只能從最上層一個個拿,這種方式叫做棧。 以下是百度百科的解釋,用以對比。 棧(stack)又
順序棧、鏈佇列、十進位制轉化為二進位制(實驗二)
1.順序棧 #ifndef SeqStack_H #define SeqStack_H const int StackSize=10; template <class DataType> class SeqStack { public: SeqStac
【資料結構實驗二】順序棧的建立、入棧和出棧
版權申明: 實驗二 順序棧的建立、入棧和出棧 實驗目的: 掌握棧的建立、入棧和出棧操作;理解順序棧在入棧和出棧時對Top指標的移動。 實驗內容: 1. 通過結構體宣告線性棧; 2. 在初始化操作
實驗三:棧和佇列的基本操作實現及其應用——順序棧
一、實驗目的1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2、 學會使用棧和佇列解決實際問題。二、實驗內容1、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操作。分別建立一個順序佇列和鏈佇列,實
實驗4:棧和佇列的基本操作實現及其應用之《順序佇列》
實驗4:棧和佇列的基本操作實現及其應用之順序佇列 一、實驗目的 1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。 2、 學會使用棧和佇列解決實際問題。 二、實驗內容 1、自己確定結點的具體資料型別和問題規模: 分別建立一個順
【資料結構作業三】利用棧(以順序棧作儲存結構)實現二、十和十六進位制轉換
#include <iostream> #define MAXSIZE 100 using namespace std; typedef int SElemType; typedef struct { SElemType *base; SElemType
實驗3:棧和佇列的基本操作實現及其應用——順序佇列和鏈佇列
實驗3:棧和佇列的基本操作實現及其應用一、實驗目的1、 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2、 學會使用棧和佇列解決實際問題。二、實驗內容1、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操