C语言实现堆栈模拟(西电C程序作业2)

2、简单数据结构-堆栈模拟
涉及知识点:内存管理、结构体定义、基本数据结构
要求:
编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作。栈中元素可用整数代替。不能使用C++模板库预定义的类型。程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素。

主体思路如下:
为了实现一个基本的栈,可以使用双端链表的方式,这样就可以记录下前一个节点的数据,也就是可以确保能够会到栈顶的上一层。具体代码如下:

#include 
#include 
struct Node {
	int val = 0;
	Node* pre = NULL;
	Node* next = NULL;
};
struct stack {
	Node* top = NULL;//记录下当前栈顶
	int size = 0;
	Node* node = NULL;
};
//在栈中嵌套链表,并使用size 变量记录下栈的大小
stack* inintStack() {
	stack* sta = (stack*)malloc(sizeof(stack));
	sta->node = (Node*)malloc(sizeof(Node));
	sta->size = 0;
	sta->top = NULL;
	return sta;
}
int isEmpty(stack* sta) {
	return sta->size == 0;
}
int getSize(stack* sta) {
	return sta->size;
}
int getTop(stack* sta) {
	return sta->size == 0 ? -1 : sta->top->val;
}
void push(stack* sta, int val) {
	sta->size++;
	//创建新节点
	sta->node->next = (Node*)malloc(sizeof(Node));
	sta->node->next->val = val;
	//连接
	sta->node->next->pre = sta->node;
	sta->node = sta->node->next;
	//下一节点置空,更新top
	sta->node->next = NULL;
	sta->top = sta->node;
}

void show(stack* sta) {
	Node* cur = sta->node;
	int size = sta->size;
	printf("stack: ");
	if (size == 0)
		printf("NULL");
	while (size-- > 0) {
		printf("%d\t", cur->val);
		cur = cur->pre;
	}
	printf("\n");
}
int pop(stack* sta) {
	if (sta->size == 0)
		return -1;
	sta->size--;
	sta->node = sta->node->pre;
	free(sta->node->next);
	sta->top = sta->node;
	return 1;
}
int main() {
	//测试的一些操作
	stack* sta = inintStack();
	show(sta);
	push(sta, 1); push(sta, 2); push(sta, 3);show(sta);
	pop(sta); show(sta); 
	pop(sta); show(sta);
	push(sta, 4); show(sta);
	pop(sta); show(sta);
	pop(sta); show(sta);
	return 0;
}

你可能感兴趣的:(随笔)