順序棧
seqstack.h
#pragma once
#includetypedef char seqtype;
#define seqmaxsize 1000
typedef struct seqstackseqstack;
//初始化棧
void seqstackinit(seqstack* seq);
//入棧
void seqstackpush(seqstack* seq, seqtype value);
//出棧
void seqstackpop(seqstack* seq, seqtype* e);
//銷毀棧
void seqstackdestory(seqstack* seq);
//列印棧
void printstack(seqstack* seq, char* msg);
seqstack.c
#define _crt_secure_no_warnings 1
#include"seqstack.h"
//初始化棧
void seqstackinit(seqstack* seq)
seq->top = 0;
seq->bottom = 0;
}//入棧
void seqstackpush(seqstack* seq, seqtype value)
if (seqmaxsize == seq->top)
//開始入棧
seq->data[++seq->top] = value;
}//出棧
void seqstackpop(seqstack* seq, seqtype* e)
if (seq->top == seq->bottom)
*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;
}
test.c
#define _crt_secure_no_warnings 1
#include#include#include"seqstack.h"
#define title printf("--------------%s-------------\n",__function__)
void testpush()
void testpop() ;
seqstackpop(&seq, e);
printf("\n\n出棧乙個元素:%c\n", *e);
}void testdestory()
int main()
鏈式棧
linkstack.h
#pragma once
#include#includetypedef char stacktype;
//建立乙個結點的結構體
typedef struct linknodelinknode;
//建立棧的結構體
typedef struct linkstacklinkstack;
//初始化鏈式棧
void linkstackinit(linkstack* link);
//入棧
void linkstackpush(linkstack* link, stacktype value);
//出棧
stacktype linkstackpop(linkstack* link);
//銷毀
void linkstackdestory(linkstack* stack);
linkstack.c
#define _crt_secure_no_warnings 1
#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;
}//判斷是否為空棧
int linkstackempty(linkstack* link)
if (link->top->_next == link->bottom && link->size == 0)
else
}//入棧
void linkstackpush(linkstack* link, stacktype value)
//建立結點
linknode* node = creatnewnode(value);
//在鏈式棧的棧頂結點和棧底結點之前插入乙個結點
linknode* next = link->top->_next;
link->top->_next = node;
node->_next = next;
link->size++;
}//銷毀乙個結點
void destorynode(linknode** node)
if (*node == null)
free(*node);
}//出棧
stacktype linkstackpop(linkstack* link)
int i = linkstackempty(link);
if (i = 1)
else
}//銷毀
void linkstackdestory(linkstack* stack)
//判斷是否為空棧
while (!linkstackempty(stack))
}
鏈式棧的測試**懶得寫了...
資料結構 順序棧 C語言實現
順序棧實現 include define size 50 static int data size 宣告陣列data,用於儲存棧中陣列 static int index 宣告變數index,用於表示棧中元素個數 初始化棧 void init 清理棧 void deinit 判棧滿 int full ...
資料結構 C語言實現堆疊的順序和鏈式結構
這裡使用結構體來表示棧。define maxsize 100 typedef struct stackstack編碼前,我們需要明白幾個操作狀態。棧空 top 1,1 同時也是初始值 棧滿 top maxsize 1 入棧 棧不滿,則top 1,然後data top 數值 棧滿則入棧失敗 出棧 棧非...
資料結構 順序棧和鏈式棧
棧 限定在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端成為棧頂,另一端稱為棧底。棧的操作特性 後進先出 順序棧 設定top指標指示棧頂元素在陣列中的位置。進棧 top 1 棧空 top 1 出棧 top 1 棧滿 top maxsize const int max size 100 temp...