1. 程式人生 > >實驗二 棧和佇列——順序棧、順序佇列

實驗二 棧和佇列——順序棧、順序佇列

  棧是什麼?

  棧是一種結構,也是一種方式。

  棧代表著“後進先出”,我是這麼理解的(如圖)


  就像是放在試管裡的雞蛋,新放進去的雞蛋肯定是在最上層,想拿走的話只能從最上層一個個拿,這種方式叫做棧。

  以下是百度百科的解釋,用以對比。

   棧(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  棧的建立

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;
}
2280 元素進棧

做的時候很容易 直接把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、自己確定結點的具體資料型別和問題規模:分別建立一個順序棧和鏈棧,實現棧的壓棧和出棧操