資料結構 C語言棧的實現

2021-09-28 20:09:50 字數 2033 閱讀 6047

首先,我們要先回顧乙個知識,對於後面棧的學習會好理解點,如果我們在main()函式中定義了乙個變數 int a; 需要在乙個自定義的函式中改變其值,要怎麼操作?

#include

"stdio.h"

#include

"stdlib.h"

intmain()

intadd

(int a)

我會首先想到這種方法,將改變後的值return回,但是在出棧的操作中,我們會遇到這種情況:我們需要將棧頂的元素返回,並將棧頂元素刪除,此時可以說棧發生變化了,那我們在該pop()函式返回時,應return哪乙個,棧?還是棧頂的元素?

再看下面這個:

#include

"stdio.h"

#include

"stdlib.h"

intmain()

void

add(

int a)

結果是10,如果不return,a值改變不了,但我們在出棧操作中要改變a的值,也就是要將棧頂的元素值賦給a。

看下面:

#include

"stdio.h"

#include

"stdlib.h"

void

add(

int*e)

intmain()

返回值為30,e值在定義的函式中改變了,

add(&e);

將e的位址傳入到了函式中,

*e=*e+20;

將位址中的值改變。

這樣,在棧的實現時,經常會有這些操作,在理解上面的內容後,在實現棧時看到很多指標型別就不難理解了,這樣就是為了在不return的情況下改變其內容。同樣對棧也可以這樣操作。

2.1 構建結構體

typedef

int selemtype;

typedef

struct

sqstack;

2.2 構造乙個空棧
int

initstack

(sqstack *s)

2.3 返回棧頂元素
int

gettop

(sqstack s,selemtype *e)

注意,此時s前沒有*,此函式操作時,棧不會發生改變。e會被賦上棧頂元素的值,也就是主函式中e的值會改變。

2.4 入棧

int

push

(sqstack *s,selemtype e)

*(s->top++

)=e;

return1;

}

此處e為待插入元素。

2.5 出棧

int

pop(sqstack *s,selemtype *e)

此時需要返回棧頂元素,並且棧會發生改變,需要用到指標變數。e會被賦上棧頂元素的值。

#include

"stdio.h"

#include

"stdlib.h"

#define stack_init_size 100

#define stackincrement 10

typedef

int selemtype;

typedef

struct

sqstack;

intinitstack

(sqstack *s)

intgettop

(sqstack s,selemtype *e)

intpush

(sqstack *s,selemtype e)

*(s->top++

)=e;

return1;

}int

pop(sqstack *s,selemtype *e)

intmain()

資料結構 棧的實現(C語言)

棧的實現 棧的結構可以是基於陣列的。它擁有兩個基本操作 出棧和入棧。而實現操作需要乙個 top 表示頂點。很簡單 上 include define maxsize 20 typedef int elemtype typedef int status typedef struct sqstack st...

C語言資料結構 棧實現迷宮

include define max 30 typedef struct box typedef struct stack int map 10 10 int search int beginx,int beginy,int endx,int endy else return 1 find 0 wh...

資料結構 棧(C語言實現)

定義 一種先進後出的資料結構 實現 標頭檔案 include include typedef struct node 定義節點 pnode,node typedef struct stack 定義棧 stack,pstack 棧的初始化 void init pstack ps else 判斷棧非空 ...