1.實驗目的
熟練掌握棧和佇列的抽象資料型別,能在相應的應用問題中正確選用他們,熟練掌握棧和佇列的實現方法(順序和鏈式)。兩種儲存結構和基本操作的實現演算法,注意空和滿的判斷條件及他們的描述方法,掌握迴圈佇列和其他順序結構實現上的不同及解決方法,熟悉各種佇列的基本操作在迴圈佇列上的實現。
2.實驗內容
(1)用棧實現括號匹配的檢驗
(2)用棧實現形如a+b@b+a#的中心對稱的字串行的檢驗。
(3)用佇列實現形如a+b@b+a#的中心對稱的字串行的檢驗。
選擇合適的儲存結構(順序棧或者鏈式棧)表示棧,給出其定義,在上述儲存結構上實現棧的基本操作:初始化、置棧空、入棧、出棧、取棧頂元素等。選擇合適的儲存結構(迴圈佇列)表示佇列,解決佇列空、隊滿判斷條件相同的矛盾,實現基於迴圈佇列的儲存結構的基本操作,初始化、隊空(滿)判斷。入隊、出隊、取隊頭元素。求佇列長度等,對寫出的·演算法進行時間複雜度的分析。
#include
#include
#define true 1
#define false 0
#define error 0
#define ok 1
#define overflow 0
#define stack_init_size 100
#define stackincrement 10
typedef
int status;
typedef
char selemtype;
typedef
struct
sqstack;
status initstack
(sqstack *s)
status push
(sqstack *s, selemtype e)
*s->top = e;
s->top++
;return ok;
}selemtype pop
(sqstack *s)
return
*--s->top;
}selemtype gettop
(sqstack *s)
return
*(s->top -1)
;//取棧頂元素
}status stackempty
(sqstack *s)
else
}status bracketsmatch
(sqstack *s)')
// 情況1:避免出現輸入的全是右括號:}])
x =pop(s);if
(!((x ==
'('&&c ==
')')
||(x ==
'['&&c ==
']')
||(x =='')
))//情況2:避免到來的右括號不是所期待的:[)
}//if語句結束
c =getchar()
;}//while迴圈結束 if(
stackempty
(s))
else
}//bracketsmatch函式結束
;//取棧頂元素
}status stackempty
(sqstack *s)
else
}status match
(sqstack *s)
c =getchar()
;while
(c !=
'@'&&
!stackempty
(s))}if
(c ==
'#'&&
stackempty
(s))
//為了解決前半部分確實匹配上了,但是"@"後邊的部分超過了前邊部分的長度
;//跳過對稱中心標誌@,不讓他進佇列
while
(*p !=
'#')
while
(queuelength
(q)!=0)
}if(q.rear == q.front)
//當從隊頭隊尾刪除字元的兩個指標相遇時,說明他們之前的字元都成功匹配上了
printf
("是中心對稱字串行!");
資料結構 實驗四棧和佇列的基本操作實現及其應用
一 實驗目的 1,熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2,學會使用棧和佇列解決實際問題。二 實驗內容 1,自己確定結點的具體資料型別和問題規模 分別建立乙個順序棧和鏈棧,實現棧的壓棧和出棧操作。分別建立乙個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。2,設計演算法並...
實驗三 棧和佇列的基本操作實現及其應用
一 實驗目的 1 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2 學會使用棧和佇列解決實際問題。二 實驗內容 1 自己確定結點的具體資料型別和問題規模 分別建立乙個順序棧和鏈棧,實現棧的壓棧和出棧操作。分別建立乙個順序佇列和鏈佇列,實現佇列的入隊和出隊操作。2 設計演算法並...
實驗4 棧和佇列的基本操作實現及其應用
1 熟練掌棧和佇列的結構特點,掌握棧和佇列的順序儲存和鏈式儲存結構和實現。2 學會使用棧和佇列解決實際問題。1 自己確定結點的具體資料型別和問題規模 分別建立乙個順序棧和鏈棧,實現棧的壓棧和出棧操作。三 源程式 五 實驗心得 棧特點就是先進後出 後進先出 從乙個口進去,從同乙個口出去。棧是限定僅在尾...