C語言棧的實現

2021-06-06 01:01:42 字數 2117 閱讀 4667

在計算機領域,堆疊是乙個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。要點:堆:順序隨意棧:後進先出(last-in/first-out)

在這裡不僅僅是實現了棧,我想通過這個棧體現組合意義

首先看一下前面我寫的鍊錶,看一下**的實現,然後再來看這個棧的實現,會發現組合的威力是多麼的巨大

和前面一樣先定義結構:

typedef struct _stack

stack;

下面定義基本操作,包括:

stack *stack_create();

ret stack_push(stack *stack, void *data);

ret stack_pop(stack *stack);

int stack_len(stack *stack);

void *stack_foreach(stack *stack, visit_func visit_func, void *ctx);

ret stack_destroy(stack *stack, des_func des_func, int index);

完整標頭檔案如下

#ifndef stack_h

#define stack_h

/** file:   queue.h

*/#include "dlist.h"

typedef struct _stack

stack;

stack *stack_create();

ret stack_push(stack *stack, void *data);

ret stack_pop(stack *stack);

int stack_len(stack *stack);

void *stack_foreach(stack *stack, visit_func visit_func, void *ctx);

ret stack_destroy(stack *stack, des_func des_func, int index);

#endif /*stack_h*/

以下是函式實現部分(stack.c):

#include "stack.h"

#include

/** file:   stack.c

*//*

*功能:實現乙個結構體的初始化

*引數:void

*返回:結構體

*/stack *stack_create()

}return stack;

}ret stack_push(stack *stack, void *data)

ret stack_pop(stack *stack)

int stack_len(stack *stack)

void *stack_foreach(stack *stack, visit_func visit_func, void *ctx)

ret stack_destroy(stack *stack, des_func des_func, int index)

return ret_ok;

}最後把測試也寫在下面,供學習者測試(stacktest.c)

#include

#include

#include "stack.h"

/** file:   stacktest.c

* /

/*#include

#include

#include "stack.h"

int main(int argc, char *argv)

stack_pop(stack);

assert(9 == stack_len(stack));

void *print_int(void *ctx, void *data)

stack_foreach(stack, print_int, null );

stack_destroy(stack, null, 0);

}在這篇文章裡我沒有對**本身進行解釋,主要向表現的是組合的思想,程式本身不是太難,(要了解我前面寫的通用鍊錶)如果沒有看的話請一定要看一下《c語言通用鍊錶的實現》

棧的實現 C語言實現

標頭檔案 include 棧 資料結構 利用陣列實現 define max 100 define ok 1 define error 0 typedef struct stack stack,stack 初始化棧 int initstack stack stack 銷毀 int destroysta...

棧的c語言和c 實現

棧 stack 是一種,先入後出的資料結構,它只有乙個出口。棧允許新增元素,移除元素取得最頂端元素,但是除了最頂端之外,沒有方法可以訪問棧的其他元素,棧的遍歷是不存在的 從頭到尾出棧 c語言實現 棧有兩種儲存結構順序儲存結構和鏈式儲存結構 在這裡我們考考慮順序儲存結構,考慮棧線性表構成 表尾端我們稱...

順序棧的實現C語言

沒有什麼要講的。順序棧的結構體裡 頭指標,尾指標,還有棧的容量。構建棧的時候,就是尋找出一片大小合適的記憶體空間,並用結構體裡的尾指標指向這片空間。頭指標開始也是指向這片空間的。壓棧就是 先判斷空間是否足夠?不夠的話,繼續分配空間 夠的話給頭指標指向的結點賦值,並把頭結點向後移一位 也就是說頭指標始...