鏈棧的基本操作-C語言
阿新 • • 發佈:2018-12-30
鏈棧的基本操作
用連結串列實現一個棧
具體實現
定義一個鏈棧
//定義一個鏈棧
typedef struct LNode {
int data;
struct LNode* next;
}LNode, *LinkStack;
初始化
//初始化鏈棧
void InitStack(LinkStack* S) {
//建立頭結點
*S = (LinkStack)malloc(sizeof(LNode));
if (!*S) {
exit(0);
}
(*S)->next = NULL;
}
入棧操作
//入棧操作
void Push(LinkStack* S, int e) {
LinkStack p = (LinkStack)malloc(sizeof(LNode));
if (!p) {
exit(0);
}
p->data = e;
p->next = (*S)->next;
(*S)->next = p;
}
出棧操作
//出棧操作
int Pop(LinkStack* S) {
//判斷是否為空
if ((*S)->next == NULL) {
printf("棧為空\n");
return 0;
}
LinkStack p = (*S)->next;
(*S) ->next = p->next;
int e = p->data;
free(p);
return e;
}
銷燬鏈棧
//銷燬鏈棧
void Destroy(LinkStack* L) {
LinkStack q = *L;
while (*L != NULL) {
q = q->next;
free(*L);
*L = q;
}
}
求鏈棧的長度
//求棧的長度
int Length(LinkStack L) {
int count = 0;
while (L->next != NULL) {
++count;
L = L->next;
}
return count;
}
測試
#include <stdio.h>
#include <windows.h>
//定義一個鏈棧
typedef struct LNode {
int data;
struct LNode* next;
}LNode, *LinkStack;
//初始化鏈棧
void InitStack(LinkStack* S) {
//建立頭結點
*S = (LinkStack)malloc(sizeof(LNode));
if (!*S) {
exit(0);
}
(*S)->next = NULL;
}
//入棧操作
void Push(LinkStack* S, int e) {
LinkStack p = (LinkStack)malloc(sizeof(LNode));
if (!p) {
exit(0);
}
p->data = e;
p->next = (*S)->next;
(*S)->next = p;
}
//出棧操作
int Pop(LinkStack* S) {
//判斷是否為空
if ((*S)->next == NULL) {
printf("棧為空\n");
return 0;
}
LinkStack p = (*S)->next;
(*S)->next = p->next;
int e = p->data;
free(p);
return e;
}
//銷燬鏈棧
void Destroy(LinkStack* L) {
LinkStack q = *L;
while (*L != NULL) {
q = q->next;
free(*L);
*L = q;
}
}
//求棧的長度
int Length(LinkStack L) {
int count = 0;
while (L->next != NULL) {
++count;
L = L->next;
}
return count;
}
int main() {
LinkStack s1;
InitStack(&s1);
for (int i = 0; i < 5; ++i) {
Push(&s1, i + 1);
}
printf("%d\n", Length(s1));
for (int i = 0; i < 5; ++i) {
printf("%d ", Pop(&s1));
}
printf("\n");
printf("%d\n", Length(s1));
Destroy(&s1);
if (!s1) {
printf("OK\n");
}
system("pause");
return 0;
}
效果圖
希望該文章能對大家有所幫助
同時真誠接受大家寶貴的評論和建議