棧 陣列與鍊錶實現

2021-06-25 22:59:07 字數 2264 閱讀 8979

棧的實現一般由陣列與鍊錶實現,但陣列實現較為常見,鍊錶實現一般不常用。以下給出兩種實現方式的完整**:

一、陣列實現

注意要點:

1. 棧為空時 top = -1;

2. 棧滿時 top = capacity;

**如下:

/*    adt: stack 

儲存結構:陣列

*/struct stackrecord;

typedef stackrecord *stack;

struct stackrecord

;#define emptytos ( -1 )

#define minstacksize ( 5 )

stack creatstack( int maxelements );

int isempty( stack s );

int isfull( stack s );

void makeempty( stack s );

void dispose( stack s );

void push( elementtype x, stack s );

void pop( stack s );

elementtype top( stack s );

elementtype topandpop( stack s );

/* 基本操作實現 */

stack creatstack(int maxelements)

s->array =( elementtype * )malloc( sizeof(elementtype) * maxelements );

if ( null == s->array )

s->capacity = maxelements;

makeempty( s );

return s;

}void disposestack( stack s )

}int isempty( stack s )

int isfull( stack s )

void makeempty( stack s )

void push( elementtype x, stack s )

}void pop( stack s )

elementtype top(stack s)

else

return s->array[s->topofstack];

}elementtype topandpop( stack s )

else

return s->array[s->topofstack--];

}

二、鍊錶實現

鍊錶實現時以top為頭指標,指向帶頭結點單鏈表的頭結點,push、pop等操作在表頭完成。

當 top->next = null時棧為空。

**如下:

/*

adt: 棧

實現:帶頭結點的單鏈表

*/struct node;

typedef struct node *ptrtonode;

typedef ptrtonode stack;

struct node

;/* 基本操作 */

stack creatstack( );

void disposestack( stack s );

int isempty( stack s );

void makeempty( stack s );

void push( elementtype x, stack s );

void pop( stack s );

elementtype top( stack s );

stack creatstack( )

s->next = null;

makeempty( s );

return s;

}void disposestack( stack s )

}int isempty( stack s )

void makeempty( stack s )

void push( elementtype x, stack s )

tmpcell->element = x;

tmpcell->next = s->next;

s->next = tmpcell;

}void pop( stack s )

}elementtype top( stack s )

棧的鍊錶實現 與 陣列實現

鍊錶實現 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...

棧的實現 鍊錶和陣列

c語言 列印函式採用的c 棧的鍊錶實現 棧的初始化 建立 清空 入棧 出棧 獲取棧頂元素 棧的陣列實現 初始化 入棧 出棧 清空棧 參考資料 資料結構與演算法分析 c語言描述 p46 stacklinklist.cpp cpp view plain copy 功能 棧的鍊錶實現 棧的初始化 建立 清...

用陣列和鍊錶實現棧

完成乙個棧總共需要完成以下操作 初始化入棧 出棧檢視棧頂元素 檢視棧的容量 清空棧。首先是簡單的,用陣列做的,會有越界的可能。include include typedef struct stack stack stack s 生成棧 void initstack 入棧,push void push...