陣列棧的定義與實現

2021-10-10 19:49:33 字數 2047 閱讀 6678

說明1:以下**在vs2017中編譯通過,讀者使用時可以直接將標頭檔案(sqstack.h),原始檔(sqstack.c),主檔案(main.c)中的內容直接拷貝過去,即可編譯執行!

說明2:圖示

標頭檔案:sqstack.h(函式的宣告)

#ifndef  _sqstack_h_

#define _sqstack_h_

#include

#include

#include

#include

#define stack_init_size 8

#define stack_increment 3

#define elemtype int

typedef

struct sqstack

sqstack;

void

initstack

(sqstack* s)

;void

push

(sqstack* s, elemtype data)

;void

pop(sqstack* s)

;bool isfull

(sqstack* s)

;bool isempty

(sqstack* s)

;void

gettop

(sqstack* s, elemtype* e)

;void

show

(sqstack* s)

;int

length

(sqstack* s)

;void

clear

(sqstack* s)

;void

destroy

(sqstack* s)

;bool increment

(sqstack* s)

;#endif

// ! _sqstack_h_

原始檔:sqstack.c(函式的定義)

#include

"sqstack.h"

void

initstack

(sqstack* s)

bool increment

(sqstack * s)

s->base = newbase;

//必須寫,否則可能崩潰,原因見realloc()函式分配原理(word)

s->top =

0+ s->capacity;

s->capacity +

= stack_increment;

return true;

}void

push

(sqstack* s, elemtype data)

s->base[s->top++

]= data;

}void

pop(sqstack* s)

s->top--;}

bool isfull

(sqstack* s)

bool isempty

(sqstack* s)

void

gettop

(sqstack* s, elemtype* e)

*e = s->base[s->top -1]

;}//棧的遍歷

void

show

(sqstack* s)

intlength

(sqstack* s)

void

clear

(sqstack* s)

void

destroy

(sqstack* s)

主檔案:main.c(測試檔案)

#include

"sqstack.h"

intmain()

鏈式棧的定義與實現

說明1 以下 在vs2017中編譯通過,讀者使用時可以直接將標頭檔案 linkstack.h 原始檔 linkstack.c 主檔案 main.c 中的內容直接拷貝過去,即可編譯執行!說明2 圖示 標頭檔案 linkstack.h 函式的宣告 pragma once include include ...

棧的鍊錶實現 與 陣列實現

鍊錶實現 include include define false 0 define true 1 define ok 1 define error 1 typedef char datatype struct stacknode stacks void initstack stacks s int...

棧的陣列實現

棧是乙個先入後出的有序資料結構 filo 棧的操作操作只能是在棧頂 top 或者棧底 bottom 進行 宣告 下面的 只是乙個最基礎的實現,沒有經過嚴格的測試。使用陣列模擬棧 public class myarraystack 判斷棧是否已經滿了 public boolean isfull pub...