1.棧是一種線性表,主要特點就是只允許在一端進行插入或刪除操作的線性表。
2.棧頂:(top)線性表允許進行插入和刪除的一端
棧底:(bottom) 是固定的,不允許進行插入和刪除的一端
採用順序儲存的棧被稱為「順序棧」,通常順序儲存結構由乙個「一維陣列」和乙個記錄「棧頂」元素位置的變數組成。
1.結構定義
#define maxsize 100
typedef int elemtype;
//順序棧的結構
typedef struct sequenstack;
sequenstack s;
棧頂指標:s.top ,初始時設定s.top=-1;
棧頂元素:s.data[s.top];
進棧操作(push):棧不滿時,棧頂指標先加1,再送值到棧頂元素
出棧操作(pop):棧非空時,先取棧頂元素值,再將棧頂指標減1。
棧空條件:s.top==-1;
棧滿條件:s.top==maxsize-1;
2.初始化
void initstack(sequenstack &s) //使用&可以修改傳入的s棧的內容
3.判斷棧是否為空
bool stackempty(sequenstack s)
else
}
4.push入棧操作
bool push(sequenstack &s, elemtype x)
//相當於 s.top++; s.data[s.top]=x;
s.data[++s.top] = x;
return true;
}
5.pop出棧操作
第一種是修改引數x的值
bool pop(sequenstack &s, elemtype &x)
第二中是返回的值是出棧的值
elemtype pop(sequenstack &s)
6.讀取棧頂元素
bool gettop(sequenstack s, elemtype &x)
分析:使兩個棧分別從陣列的兩頭開始向中間擴充套件,當兩個棧的棧頂指標相遇時,表示兩個棧都滿了。
1.共享棧的結構
#define maxsize 100
typedef int elemtype;
typedef struct ;
dstack s;
2.初始化
void initdstack(dstack &s)
3.push入棧
void push(dstack * ptrs, elemtype x, int tag)
if (tag == 1) //等於1時讓第乙個口進
else
}
4.pop出棧
elemtype pop(dstack *ptrs, int tag)
else
} else
else
}}
採用鏈式儲存結構的棧叫做鏈棧,通常採用單鏈表實現,規定鏈棧沒有頭結點
插入和刪除操作只能在鏈棧的棧頂進行。
1.棧的鏈式結構定義
typedef struct linknode *linkstack;
2.初始化
linkstack initstack()
3.判斷棧是否為空
int isempty(linkstack s)
考研資料結構 線性表
線性表是具有相同特徵資料元素的乙個有限序列。元素個數叫做線性表的長度,n n 0 表示,n 0 空表 只有乙個表頭元素,只有乙個表尾元素。表頭無前驅,表尾無後繼,除表頭和表尾外,其他元素只有乙個直接前驅,也只有乙個直接後繼。順序儲存結構 順序表 和鏈式儲存結構 鍊錶 兩種。順序表 連續儲存 順序儲存...
資料結構考研筆記 線性表
1.線性表的定義 線性表是具有相同特性元素的乙個有限序列。所含元素個數 線性表長度。2.線性表的邏輯特性 只有乙個表頭元素,乙個表尾元素,表頭元素沒有前驅,表尾元素沒有後繼,其他元素只有乙個直接前驅,乙個直接後繼。3.線性表的儲存結構 1 順序儲存結構 順序表 隨機訪問特性 需占用連續的儲存空間 做...
考研資料結構 線性表 佇列
def 佇列是一種操作受限的線性表,與棧相同也不同,不同的是佇列是在一端進入 入隊 另一端出去 出隊 操作特性是先進先出。通常由乙個一維陣列和乙個記錄佇列頭元素位置的變數front以及乙個記錄尾元素位置的變數rear組成。1.佇列的順序儲存結構定義 define maxsize 100 佇列順序儲存...