功能:1.初始化
2.銷毀
3.入棧
4.出棧
順序棧seqstack.h
#pragma once
#include
#define max_size 1000
typedef char seqstacktype;
//順序棧
typedef struct seqstack
seqstack;
//初始化
void seqstackinit(seqstack *seq);
//銷毀
void seqstackdestory(seqstack *seq);
//入棧
void seqstackpush(seqstack *seq, seqstacktype value);
//出棧
void seqstackpop(seqstack *seq, seqstacktype *e);
void printstack(seqstack *seq, char *msg);
seqstack.c
#include "seqstack.h"
#define title printf("--------------%s-------------\n",__function__)
void seqstackinit(seqstack *seq)
seq->top = 0;
seq->bottom = 0;
}void seqstackpush(seqstack *seq, seqstacktype value)
if (max_size == seq->top)
seq->data[++seq->top] = value;
}void seqstackpop(seqstack *seq, seqstacktype *e)
if (seq->bottom == seq->top)
*e = seq->data[seq->top--];
}void printstack(seqstack *seq, char *msg)
printf("\n\n\n%s", msg);
printf("[seq->top]->");
while((seq->top) != 0)
printf("[bottom]\n");
}void seqstackdestory(seqstack *seq)
seq->top = seq->bottom = 0;
}void testpush()
void testpop() ;
seqstackpop(&seq, e);
printf("\n\n出棧乙個元素:%c\n", *e);
}void testdestory()
int main()
鏈式棧linkstack.h
#pragma once
#include
typedef
char stacktype;
//建立乙個結點的結構體
typedef
struct linknodelinknode;
//建立棧的結構體
typedef
struct linkstacklinkstack;
void destorynode(linknode **node);
//初始化鏈式棧
void linkstackinit(linkstack* link);
//入棧
void linkstackpush(linkstack* link, stacktype value);
//出棧
stacktype linkstackpop(linkstack* link);
//銷毀
void linkstackdestory(linkstack* stack);
linkstack.c
#include
#include
"linkstack.h"
linknode *creatnewnode(stacktype value)
//初始化鏈式棧
void linkstackinit(linkstack*
link)
link
->top = creatnewnode('0');
link
->bottom = creatnewnode('0');
link
->top->_next =
link
->bottom;
link
->size =0;}
//入棧
void linkstackpush(linkstack*
link, stacktype value)
linknode* node = creatnewnode(value);
linknode* next =
link
->top->_next;
link
->top->_next = node;
node->_next = next;
link
->size++;
}//出棧
stacktype linkstackpop(linkstack*
link)
if (link
->size ==0&&
link
->top->_next ==
link
->bottom)
linknode *pop =
link
->top->_next;
link
->top->_next = pop->_next;
link
->size--;
stacktype n = pop->
data;
destorynode(&pop);
return n;
}//銷毀乙個結點
void destorynode(linknode** node)
if (*node ==
null)
free(*node);
}int linkstackempty(linkstack*
link)
if (link
->top->_next ==
link
->bottom &&
link
->size ==
0) else
}//銷毀
void linkstackdestory(linkstack*
stack)
//判斷是否為空棧
while (!linkstackempty(stack))
}
資料結構 順序棧和鏈式棧
棧 限定在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端成為棧頂,另一端稱為棧底。棧的操作特性 後進先出 順序棧 設定top指標指示棧頂元素在陣列中的位置。進棧 top 1 棧空 top 1 出棧 top 1 棧滿 top maxsize const int max size 100 temp...
資料結構棧(鏈式實現)
真正的棧操作是在棧頂,這裡給出的棧是帶了頭結點的棧,也就是說head next代表圖示棧頂,head next data是1 實現 include include typedef int datatype typedef struct snode lsnode 初始化帶頭結點的鏈式堆疊,初始化函式中...
資料結構遍歷順序棧 資料結構 順序棧的實現
資料結構 順序棧的實現 1 快速開始 棧是一種遵循元素後進 push 先出 pop 規則的線性表,即最後加入的元素最先出來,它的實現可以用陣列或者鍊錶。它的特點如下 先出,先入後出。除了頭尾節點之外,每乙個元素有乙個前驅,有乙個後繼。2 實現棧 我們已經說過了,棧是一種線性表,故其底層是基於陣列或者...