C語言自己手動實現乙個棧

2021-08-08 18:06:40 字數 2013 閱讀 8603

#include#include#define stack_init_size 100      //儲存空間的初始分配

#define stack_increment 10 //儲存空間分配增量

typedef structstack;

void init_stack(stack *s); //構造乙個空棧

void destroy_stack(stack *s); //銷毀 s棧,s棧不再存在

void clear_stack(stack *s); //將s置為空棧

int stack_length(stack *s); //返回s棧的元素,即棧的長度

int get_top(stack *s); //若棧不空,則返回s的棧頂元素

void push_stack(stack *s,int dat); // 插入元素dat為s棧的新元素

int pop_stack(stack *s); //刪除s的棧頂元素,並返回刪除的元素值

void display_stack(stack *s); //遍歷s棧的每個元素

void init_stack(stack *s) //構造乙個空棧

(*s).top=(*s).base; //此時的棧是空棧,所以棧頂指標是棧底指標是相同的

//printf("base->%p\n",(*s).base); //用來檢視棧頂,和棧底的位址,測試棧初始化情況

//printf("top ->%p\n",(*s).top);

printf("棧初始化成功!!!\n");

}void push_stack(stack *s,int dat) //插入資料dat到s棧

(*s).stacksize+=stack_increment; //如果擴充成功,記錄元素個數的每次增長10

} (*s).top++;

*(*s).top=dat;//dat資料進來棧頂top指標要上移

printf("top ->%p\n",(*s).top);

printf("t->%d\n",*(*s).top); }

int pop_stack(stack *s) //彈棧

dat=*(*s).top; //先把資料存到dat

(*s).top--; //然後指標下移

//printf("彈棧:%p\n",(*s).top);

return dat;

} int get_top(stack *s) //返回棧頂的元素值

dat=*(*s).top; //先把資料存到dat

printf("get_top%p\n",(*s).top);

return dat;

}void clear_stack(stack *s) //清空棧

else

}int stack_length(stack *s) //返回棧的長度

void display_stack(stack *s) //遍歷棧並顯示出裡面的元素

int *tmp=(*s).base;

do while(tmp<=(*s).top);

} void destroy_stack(stack *s) //銷毀棧 }

int main()

printf("彈棧:%d\n", pop_stack(&s)); //彈出棧頂的元素,並顯示出來 ,這個棧頂元素被刪除

printf("棧的長度:%d\n",stack_length(&s)); //顯示棧裡面的元素個數

display_stack(&s); //遍歷棧裡面的元素並顯示出來

clear_stack(&s); //清空棧

destroy_stack(&s); //銷毀棧(棧不使用時要釋放占用的記憶體)

return 0;

}

自己實現乙個棧 Java

思路 1 使用鍊錶實現乙個棧,便於擴容 不用考慮陣列擴容場景 維護根節點和最 棧的節點 2 節點中維護pre指標,便於pop 時快速找到上乙個節點 package com.datastructure.stackqueue 實現乙個棧,自定義棧,用鍊錶實現,方便擴容 public class defi...

c語言 實現乙個棧

include include include include 入棧出站操作 typedef struct nodenode,pnode typedef struct stack pstack,stack void init pstack void push pstack,int bool isem...

c語言倆個棧實現乙個佇列

思路,現在設有倆個棧s1,s2。完成乙個佇列。入隊時,資料進入棧s1。出隊時檢查s2棧是否為空,為空則將s1出棧,出棧資料依次入棧s2。完成乙個s1全部出棧後,s2出棧既是此時的出隊操作。如果s2不為空,那s2直接出棧。如果s2,s1都為空,此時隊列為空,無法執行出隊操作。如下。filename s...