資料結構(C語言版) 棧

2021-10-05 06:28:51 字數 1831 閱讀 3145

1、棧:僅在表尾進行插入和刪除操作的線性表。後進先出lifo。

1)表尾端(允許插入和刪除的一端)為棧頂,表頭端(不允許插入和刪除的一端)為棧底。

2)入棧:插入元素的操作。出棧:刪除棧頂元素

2、棧的兩種儲存表示方式

2)鏈棧(棧的鏈式儲存結構);優點是便於多個棧共享儲存空間和提高效率。

3、括號匹配檢驗

1)左括號,則進棧。

2)右括號,若棧為空,則右括號多。

3)右括號,與棧頂元素比較,若相等則左括號出棧,若不相等則不匹配。

4)表示式檢驗結束時,若棧空則匹配成功,否則左括號多。

4、棧的基本操作

initstack(&s):構造空棧

destroystack(&s):銷毀棧

clearstack(&s):清空棧

stackempty(s):判斷棧是否為空,若為空則返回true,否返回false

stacklength(s):返回棧的長度

gettop(s,&e):用e返回棧的棧頂元素

push(&s,e):插入e為新棧頂

pop(&s,&e):刪除棧頂元素,並用e返回其值。

5、共享棧:利用棧底位置相對不變性的特性,使得兩個順序棧共享乙個一維資料空間,將兩個棧底設定在共享空間的兩端。

1)top0=-1時0號棧為空,top1=maxsize時1號棧為空,僅當兩個棧頂指標相鄰(top1-top0=1)時,棧滿。

2)當0號棧進棧時top0先加1再賦值,1號棧進棧時top1先減1在賦值。

6、棧的順序儲存型別描述

#define maxsize 50

typedef struct sqstack;

1)初始化棧

void initstack(sqstack &s)

2)判斷棧空

bool stackempty(sqstack s)

else

}3)進棧

bool push(sqstack &s, int e)

s.data[++s.top] = e;

return true;

}5)出棧

bool pop(sqstack &s, int &e)

e = s.data[s.top--];

return true;

}6)讀棧頂元素

bool gettop(sqstack s, int &e)

e = s.data[s.top--];

return true;

}7、棧的鏈式儲存結構型別描述

typedef struct linkstack *listack;

8、一些基本問題的解決

1)以io分別表示入棧和出棧操作,棧的初態和終態都為空,可以操作的序列稱為合法序列,判斷序列是否合法。

int judge(cha a)

}i++;

}if (j != k)

else

}2)設棧s1,s2都擦用順序棧,並共享乙個儲存區[0,...,maxsize-1],採用棧頂相向、迎面增長的儲存方式,出棧和入棧的實現。i為棧號,i=0表示左邊的棧s1,i=1表示右邊的棧s2,e為入棧元素。

typedef struct stk;

stk s;

//入棧

int push1(int i, int e)

if (s.top[1] - s.top[0] == 1)

switch (i)

}//出棧

int pop1(int i)

switch (i)

else

case 1:

if (s.top[1] == maxsize)

else}}

資料結構(C語言版)

用棧實現數字的進製轉換 10轉8 棧 限定只能在表尾進行插入或者刪除操作的線性表 特點 先進後出 儲存表示方法 順序棧和鏈棧 本文用的順序棧 實現 readonly name code class c include include define stack init size 100 儲存空間初始...

資料結構與演算法(C語言版) 棧

棧是一種常用的資料結構,棧常用在系統軟體和或者演算法中。棧使用陣列來做順序棧,鏈式站用鍊錶來做。今天使用動態陣列來設計棧。棧,後進先出 lifo 先進後出 filo push,進棧 pop,出棧 peek,看一下棧頂 我使用的是vs ultimate2013 新建乙個空專案,在標頭檔案裡面新增兩個標...

資料結構棧的實現 C語言版

include include 棧的初始長度 define stack init size 100 棧滿時,棧的每次增加的大小 define stackincrement 10 棧中的資料型別是int typedef int selemtype 定義棧的棧底指標,棧頂指標,以及棧的容量 typede...