棧的鍊錶實現

2022-04-28 19:12:11 字數 1933 閱讀 2021

鏈棧結構如下圖所示:len用來儲存棧中元素個數

圖示:當鍊表為空時,即棧為空棧時插入情況

圖示:非空時插入

圖示:彈出棧頂

/* 構造乙個空戰 */

status initstack(slinklist *s)

(*s)->len = 0; /* 棧元素長度初始化為0 */

(*s)->head->next = null; /* 初始為空鍊錶 */

return ok;

}/* 銷毀棧s,s不再存在 */

status destorystack(slinklist *s)

free((*s)->head);

free((*s));

*s = null; /* 銷毀s指標本身 */

return ok;

}/* 把棧s置為空棧 */

status clearstack(slinklist s)

s->head->next = null;

/* 這裡要注意,s->head->next指向的那片記憶體已經free掉了

* 但是s->head->next 還是指向**,需要將其指向空 */

return ok;

}/* 如果棧為空則返回true,否則返回false */

status stackempty(slinklist s)

/* 返回棧的長度 */

int stacklength(slinklist s)

/* 插入元素e為新的棧頂 */

status push(slinklist s, selemtype e)

/* 若棧不空,則彈出棧頂元素,用e儲存返回值 */

status pop(slinklist s,selemtype *e)

/* 若棧不為空,則用e返回s的棧頂元素,並返回ok,否則返回error */

status gettop(slinklist s, selemtype *e)

/* 從棧頂往下列印棧中的資料 */

void printslist(slinklist s)

printf("\n");

}int main()

// 獲取棧長度測試

printf("len %d\n",stacklength(ps));

// 彈出棧頂

pop(ps,&e);

printf("pop %d\n",e);

printf("len %d\n",stacklength(ps));

// 列印棧測試

printslist(ps);

// 獲取棧頂測試

gettop(ps,&e);

printf("top %d\n",e);

// 銷毀測試

destorystack(&ps);

printf("\nreturn 0\n");

}

鍊錶實現棧

include include typedef int datatype 自定義資料型別,假定為整型 struct node 單鏈表結點型別 typedef struct node pnode 結點指標型別 typedef struct node 單鏈表結點結構 node typedef struc...

鍊錶實現棧

include include typedef int datatype 自定義資料型別,假定為整型 struct node 單鏈表結點型別 typedef struct node pnode 結點指標型別 typedef struct node 單鏈表結點結構 node typedef struc...

棧(鍊錶實現)

1.思路 節點結構體為 乙個int數值,乙個指向下乙個節點的指標struct next。設定乙個煉表頭節點p,每次入棧的節點都放在p點的下乙個節點,前面的節點則依次往後推移一位 每次出棧時將p next對應節點值輸出,並將p next指向p next next 當p next為nullptr則表明棧...