栈链表形式

上学期大一我相信大家刚学C语言应该都是谭浩强版本的书,.而里面唯一的一个数据结构就是链表,当时自学这个确实被弄迷糊了,当时学完这个链表之后就对指针有了更深的理解.

最近在学数据结构刚好学到了栈这个ADT,就自己写了下,如果有什么问题忘告知.

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
struct Node {
	int After;
	struct Node* next;
};

typedef struct Node* Stack;
typedef struct Node ** Stack_t;
void Storing(Stack_t LeStack);
void Posh(Stack_t LeStack, int x);
bool Stackptr(Stack LeStack);
int top(Stack_t LeStack);
int Pop(Stack_t LeStack);
void DeleteStack(Stack_t LeStack);

int main(void) {
	Stack LeStack;
	Storing(&LeStack);
	Posh(&LeStack, 2);
	int vce = top(&LeStack);
	printf("%d\n", vce);
	Posh(&LeStack, 3);
	int hce = top(&LeStack);
	printf("%d\n", hce);
	Posh(&LeStack, 4);
	int back = top(&LeStack);
	printf("%d\n", back);
	int gdsl_stack = Pop(&LeStack);
	int stackLnfo = Pop(&LeStack);
	int tobig = Pop(&LeStack);
	printf("%d\t%d\t%d\n", gdsl_stack,stackLnfo,tobig);
	Posh(&LeStack, 6);
	Posh(&LeStack, 7);
	DeleteStack(&LeStack);
	return 0;
}
/*初始化结构*/
void Storing(Stack_t LeStack) {
	*LeStack = NULL;
}
/*压栈*/
void Posh(Stack_t LeStack, int x) {
	Stack stack_t;
	Stack stackInfo = *LeStack;
	stack_t = (Stack)malloc(sizeof(struct Node));
	stack_t->After = x;
	stack_t->next = NULL;
	if (stackInfo == NULL)
		*LeStack = stack_t;
	else {
		stack_t->next = *LeStack;
		(*LeStack) = stack_t;
	}
}
/*查看顶栈*/
int top(Stack_t LeStack) {
	if (Stackptr(*LeStack)) {
		printf("栈为空");
		exit(EXIT_FAILURE);
	}
	return (* LeStack)->After;
}
/*出栈*/
int Pop(Stack_t LeStack) {
	if (Stackptr(*LeStack)) {
		printf("栈为空");
		exit(EXIT_FAILURE);
	}
	int pop = (*LeStack)->After;
	Stack stack_Size = (*LeStack);
	*LeStack = stack_Size->next;
	free(stack_Size);
	return pop;
}
/*是否为空栈*/
bool Stackptr(Stack LeStack) {
	if (LeStack == NULL) {
		return 1;
	}
	else
		return 0;
}
/*清空栈*/
void DeleteStack(Stack_t LeStack) {
	Stack stack_t = *LeStack;
	if (Stackptr(*LeStack)) {
		printf("栈为空");
		exit(EXIT_FAILURE);
	}
	while (*LeStack != NULL) {
		*LeStack = stack_t->next;
		free(stack_t);
		stack_t = *LeStack;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值