#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...