1. 程式人生 > >鏈棧的基本操作-C語言

鏈棧的基本操作-C語言

鏈棧的基本操作

用連結串列實現一個棧

具體實現

定義一個鏈棧

//定義一個鏈棧
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;
}

效果圖
在這裡插入圖片描述

希望該文章能對大家有所幫助
同時真誠接受大家寶貴的評論和建議