4 棧 鏈式儲存

2022-09-19 14:57:11 字數 2000 閱讀 5133

棧-鏈式儲存

使用鍊錶的方式儲存棧的指標資料,將棧頂設定在鍊錶頭部

入棧就相當於頭插、出棧相當於頭刪

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