棧-鏈式儲存
使用鍊錶的方式儲存棧的指標資料,將棧頂設定在鍊錶頭部
入棧就相當於頭插、出棧相當於頭刪
size記錄棧的大小,資料預留出4位元組用來儲存指標
#include//使用鍊錶的方式儲存棧的指標資料,將棧頂設定在鍊錶頭部
//入棧就相當於頭插、出棧相當於頭刪
//初始化管理棧的結構體
mystacktype* init_stack()
st->head.next = null; //清零
st->m_size = 0;
return st;
}//入棧
void push_stack(mystacktype* st, void* data)
struct linknode* mynode = data; //將資料指標轉換成節點型別,使用data預留的4位元組
mynode->next = st->head.next; //頭插
st->head.next = mynode;
st->m_size++;
}//出棧
void pop_stack(mystacktype* st)
if(st->m_size == 0)
struct linknode* delnode = st->head.next; //頭刪
st->head.next = delnode->next;
st->m_size--;
}//獲取棧頂資料
void* top_stack(mystacktype* st)
return st->head.next; //即鍊錶的第乙個元素
}int size_stack(mystacktype* st)
return st->m_size;
}//銷毀棧結構體
void destroy_stack(mystacktype** st)
mystack.h
#ifndef __mystack_h
#define __mystack_h
struct linknode;
typedef struct mystacktype;
mystacktype* init_stack(void);
void push_stack(mystacktype* st, void* data);
void pop_stack(mystacktype* st);
void* top_stack(mystacktype* st);
int size_stack(mystacktype* st);
void destroy_stack(mystacktype** st);
#endif
start0.c#include"mystack.h"
#includestruct persion;
int main();
struct persion p2 = ;
struct persion p3 = ;
struct persion p4 = ;
push_stack(st,&p1);
push_stack(st,&p2);
push_stack(st,&p3);
push_stack(st,&p4);
printf("size=%d\n",size_stack(st));
while(size_stack(st) > 0)
printf("size=%d\n",size_stack(st));
destroy_stack(&st);
return 0;
}
棧順序儲存 鏈式儲存
1.棧的順序儲存之動態儲存 include include define ok 1 define false 0 define true 1 define stack init size 20 儲存空間初始分配量 define stackincrement 5 儲存空間分配增量 typedef in...
鏈式儲存mysql 鏈棧 棧的鏈式儲存結構
前面講完了棧的順序儲存結構,我們現在來看看棧的鏈式儲存結構,簡稱為鏈棧。鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指標就是鍊錶的頭指標。棧是用棧頂來做插入和刪除操作,那麼對於鏈棧的棧頂放在鍊錶的頭部還是尾部呢?單鏈表有頭指標,而棧頂指標也是必須的,那幹嗎不讓它倆合二為一呢,所以比較好的辦法是把棧頂...
C 棧 鏈式儲存
ifndef my linkstack h define my linkstack h typedef void linkstack linkstack linkstack create void linkstack destroy linkstack stack void linkstack cl...