链栈的基本操作-C语言

版权声明:Sock的blog, 可以偷看但不可以偷走哦 https://blog.csdn.net/qq_42957923/article/details/85214734

链栈的基本操作

用链表实现一个栈

具体实现

定义一个链栈

//定义一个链栈
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;
}

效果图
在这里插入图片描述

希望该文章能对大家有所帮助
同时真诚接受大家宝贵的评论和建议

猜你喜欢

转载自blog.csdn.net/qq_42957923/article/details/85214734