考研C语言数据结构-链栈(栈的链式存储实现)

#include <stdio.h>
#include <stdlib.h>

// 定义结点数据类型
typedef struct LNode {

	int data; // 数据域
	struct LNode *next; // 指针域
}LNode, *LiStack;

// 初始化链栈(带头结点)
void initLiStack(LiStack &S) {

	S = (LNode *)malloc(sizeof(LNode));

	S->next = NULL;
}

// 判断栈空
bool isEmpty(LiStack S) {

	if(S->next == NULL)
		return true;

	return false;
}

// 入栈(头插法LIFO)
void push(LiStack &S, int e) {

	LNode *p = (LNode *)malloc(sizeof(LNode));

	p->data = e;

	p->next = S->next;

	S->next = p;
}

// 出栈
bool pop(LiStack &S, int &e) {

	if(isEmpty(S))
		return false;

	LNode *p = S->next;

	e = p->data;

	S->next = p->next;

	free(p);

	return true;
}

// 读栈顶元素
bool getTop(LiStack S, int &e) {

	if(isEmpty(S))
		return false;

	e = S->next->data;

	return true;
}

int main(void) {

	LiStack S;

	initLiStack(S);

	push(S, 1);
	push(S, 2);
	push(S, 3);
	push(S, 4);

	int e = -1;
	if(pop(S, e))
		printf("出栈元素:%d\n", e);

	if(pop(S, e))
		printf("出栈元素:%d\n", e);

	if(pop(S, e))
		printf("出栈元素:%d\n", e);

	if(pop(S, e))
		printf("出栈元素:%d\n", e);

	if(isEmpty(S))
		printf("栈已空\n");

	system("pause");
	return 0;
}

posted @ 2022-05-07 19:39  dqlai  阅读(88)  评论(0)    收藏  举报