九度題目1108 堆疊的使用

2021-09-30 12:12:45 字數 2154 閱讀 3002

堆疊的使用

時間限制:1 秒

記憶體限制:32 兆

特殊判題:否

提交:4344

解決:1249

題目描述:堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push乙個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆疊的使用。

輸入:對於每組測試資料,第一行是乙個正整數 n,0

輸出:對於每組測試資料,根據其中的命令字元來處理堆疊;並對所有的'a』操作,輸出當時棧頂的值,每個佔據一行,如果當時棧為空,則輸出'e』。當每組測試資料完成後,輸出乙個空行。

樣例輸入:

3

ap 5a4

p 3p 6o a

0

樣例輸出:

e

53

對題目的理解:

1、關於「堆疊」的理解,首先我們會想「堆疊」和「堆」、「棧」是什麼關係?這個問題會越想越複雜的啦,網上有些資料說「堆疊」簡稱「棧」,但在這個題目裡呢,就不必糾結它到底是個什麼東西,有什麼特徵,題目裡面已經給出了它的定義和特徵,這是題目裡的定義和特徵,做這個題目也只需要題目裡的定義和特徵,定義是一種資料結構,特徵就是pop和push。

2、知道了題目中」堆疊「的特徵就需要來實現了,是使用陣列還是連線,棧在大小明確的情況下使用的是陣列。我們使用陣列。定義陣列大小maxsize = 10001。

在c++中的stack是deque(雙端佇列)的介面卡,使用的是

分段陣列的實現方式。

vector使用的陣列實現方式,它的自增功能採用陣列空間用完,然後分配乙個更大的空間,把之前的陣列拷貝進去,釋放之前的陣列空間。可以**一下為什麼要使用陣列實現方式?實驗室一位牛掰師兄給出了他的看法,deque是頭尾刪除,vector需要隨機訪問,陣列結構隨機訪問時間複雜度為0(1)。

c++版本:

#include #include #define maxsize 10001

using namespace std;

int stack[maxsize];

int push(int i)

void getop(int i)

int pop(int i)

int main(void)

} printf("\n");

}return 0;

}

c版本:

#include #define maxsize 10001

int stack[maxsize];

int top;

void push()

void gettop()

void pop()

int main()

while(getchar()!='\n');//為什麼這樣使用,是因為案例中有一行字母後面//不是直接的換行符,還有乙個空格符,

}

printf("\n");

}return 0;

}

c版本的**在vs2012裡面編譯會出現編譯錯誤,使用gcc編譯器編譯在c89下面會出問題,在c99問題裡面是完全ok,出現這種問題的原因是c89不允許在for迴圈裡定義變數,必須放在方面,置於vs2012出問題的原因更奇怪,把定義放for語句前面也會報錯,據一位牛掰師兄說,可能是因為vs的編譯器要求函式裡的變數都需要在函式內部的最前面定義(我試了一下這個不太準,其事for迴圈體內部也是可以定義變數的),但是如果把for語句內部的變數定義語句放到函式的開頭處,編譯將順利通過。

題外知識——棧

1、棧是什麼?後進先出的資料結構。

與同學討論遇到諸多問題:

1、scanf和cin輸入字元的表現,只能輸入可見字元,cin為什麼遇到空格會停止輸入,cin是如何從輸入緩衝區裡提取輸入的字元,並可以判定是不是自己所需輸入字元,並且得到自己的輸入結果賦給變數?

2、變數不初始化變數就使用在vs裡執行會報錯,但是在gcc裡執行時不會報錯,vs到底是什麼原因導致了執行時的錯誤,在兩種環境下都是可以獲取變數的位址的,就代表變數在定義時就已經分配了空間。

3、case裡面是不能初始化乙個變數,但是能夠定義乙個變數,為什麼會出現這個差異?

九度OJ題目1108 堆疊的使用

題目描述 堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push乙個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆疊的使用。輸入 對於每組測試資料,第一行是乙個正整數 n,0 輸出 對於每組測試資料,根據其中的命令字元來處理堆疊 並對所有的 a ...

題目1108 堆疊的使用

題目描述 堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push乙個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆疊的使用。輸入 對於每組測試資料,第一行是乙個正整數 n,0 輸出 對於每組測試資料,根據其中的命令字元來處理堆疊 並對所有的 a ...

題目1108 堆疊的使用

題目描述 堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push乙個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆疊的使用。輸入 對於每組測試資料,第一行是乙個正整數 n,n 10000 n 0 結束 而後的 n 行,每行的第乙個字元可能是 p ...