C 棧 鏈式儲存

2021-09-07 02:25:24 字數 4101 閱讀 7167

#ifndef _my_linkstack_h_

#define _my_linkstack_h_typedef

void

linkstack;

linkstack*linkstack_create();

void linkstack_destroy(linkstack*stack);

void linkstack_clear(linkstack*stack);

int linkstack_push(linkstack* stack, void*item);

void* linkstack_pop(linkstack*stack);

void* linkstack_top(linkstack*stack);

int linkstack_size(linkstack*stack);

#endif

//_my_linkstack_h_

#define  _crt_secure_no_warnings #include 

#include

#include

#include

"linkstack.h

"#include

"linklist.h

"typedef

struct

_tag_linkstack

tlinkstack;

//建立乙個棧 相當於 建立乙個線性表

linkstack*linkstack_create()

void linkstack_destroy(linkstack*stack)

void linkstack_clear(linkstack*stack)

return;}

//向棧中新增元素 相等向 線性表中 新增結點

int linkstack_push(linkstack* stack, void*item)

return

ret;}//

從棧中 彈出 元素 相當於 從線性表中 刪除0號位置元素

void* linkstack_pop(linkstack*stack)

//把鍊錶節點 ====>轉換成 棧結點

item = tmp->item;

free(tmp);

return

item;}//

獲取棧頂元素 相等於 從線性表的0號位置元素

void* linkstack_top(linkstack*stack)

item = tmp->item;

return

item;

}int linkstack_size(linkstack*stack)

#ifndef _mylinklist_h_

#define _mylinklist_h_typedef

void

linklist;

/*typedef struct _tag_linklistnode linklistnode;

struct _tag_linklistnode;*/

typedef

struct

_tag_linklistnode

linklistnode;

linklist*linklist_create();

void linklist_destroy(linklist*list);

void linklist_clear(linklist*list);

int linklist_length(linklist*list);

int linklist_insert(linklist* list, linklistnode* node, int

pos);

linklistnode* linklist_get(linklist* list, int

pos);

linklistnode* linklist_delete(linklist* list, int

pos);

#endif

#define  _crt_secure_no_warnings #include 

#include

#include

#include

"linklist.h

"typedef

struct

_tag_linklist

tlinklist;

//linklist* linklist_create() //

o(1)

memset(tmp,

0, sizeof

(tlinklist));

tmp->length = 0

; tmp->header.next = null; //

return

tmp;

}void linklist_destroy(linklist* list) //

o(1)

free(list);

return;}

void linklist_clear(linklist* list) //

o(1)

tlist->header.next =null;

tlist->length = 0

;

return;}

int linklist_length(linklist* list) //

o(1)

return tlist->length;

}int linklist_insert(linklist* list, linklistnode* node, int pos) //

o(n)

current = &(tlist->header);

for (i=0; i)

//新結點 連線 後繼鍊錶

node->next = current->next;

//前面的鍊錶 連線 新結點

current->next =node;

tlist->length ++;

return0;

}linklistnode* linklist_get(linklist* list, int pos) //

o(n)

current = &(tlist->header); //

賦值指標變數初始化

for (i=0; i)

return current->next;

}linklistnode* linklist_delete(linklist* list, int pos) //

o(n)

current = &(tlist->header);

for (i=0; i)

ret = current->next; //

快取要刪除的結點

current->next = ret->next;

tlist->length --;

return

ret;

}

#define  _crt_secure_no_warnings #include 

#include

#include

#include

"linkstack.h

"void

main()

stack =linkstack_create();

//向棧中 新增 元素

for (i=0; i<5; i++)

//棧的屬性

printf("

len:%d \n

", linkstack_size(stack));

printf(

"top:%d \n

", *( (int *)linkstack_top(stack) ) );

/*//元素 出棧

while (linkstack_size(stack) > 0 )

*/linkstack_destroy(stack);

printf(

"hello...\n");

system(

"pause");

return

;}

棧順序儲存 鏈式儲存

1.棧的順序儲存之動態儲存 include include define ok 1 define false 0 define true 1 define stack init size 20 儲存空間初始分配量 define stackincrement 5 儲存空間分配增量 typedef in...

鏈式儲存mysql 鏈棧 棧的鏈式儲存結構

前面講完了棧的順序儲存結構,我們現在來看看棧的鏈式儲存結構,簡稱為鏈棧。鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指標就是鍊錶的頭指標。棧是用棧頂來做插入和刪除操作,那麼對於鏈棧的棧頂放在鍊錶的頭部還是尾部呢?單鏈表有頭指標,而棧頂指標也是必須的,那幹嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂...

棧的鏈式儲存

線性表的順序儲存來模擬棧時,在尾部新增或者刪除元素,不會涉及到陣列的元素大量移動 用線性表的鏈式儲存來模擬棧的線性儲存,在頭部新增或刪除,不用從頭到尾遍歷 linkstack.h ifndef my linkstack h define my linkstack h typedef void lin...