上学期大一我相信大家刚学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;
}
}