数据结构之栈的基本操作
#include <stdio.h>
#include <stdlib.h>
typedef struct MyStackNode{
int data;
struct MyStackNode *front;
}MyStackNode;
typedef struct MyStack
{
int length;
MyStackNode *top;
MyStackNode *base;
}MyStack;
MyStack* MyStack_create()
{
MyStack *stack = (MyStack *)malloc(sizeof(MyStack));
stack->top = NULL;
stack->base = NULL;
stack->length = 0;
return stack;
}
int MyStack_isEmpty(MyStack *stack)
{
if(stack == NULL) return 1;
return stack->length == 0;
}
void MyStack_push(MyStack *stack, int data)
{
if(stack == NULL) return;
MyStackNode *node = (MyStackNode *)malloc(sizeof(MyStackNode));
node->data = data;
node->front = NULL;
if(stack->length == 0)
{
stack->base = node;
stack->top = node;
}
else
{
node->front = stack->top;
stack->top = node;
}
stack->length ++;
}
int MyStack_pop(MyStack *stack)
{
if(MyStack_isEmpty(stack)) return -1;
MyStackNode *node = NULL;
if(stack->base == stack->top)
{
node = stack->top;
stack->base = NULL;
stack->top = NULL;
}
else
{
node = stack->top;
stack->top = node->front;
}
stack->length --;
int data = node->data;
if(node != NULL) free(node);
return data;
}
void MyStack_prinln(MyStack *stack)
{
if(MyStack_isEmpty(stack)) return;
MyStackNode *p = stack->top;
printf("\n");
while (p != NULL)
{
printf("%d ", p->data);
p = p->front;
}
}
void MyStack_clear(MyStack *stack)
{
if(MyStack_isEmpty(stack)) return;
MyStackNode *p = stack->top;
while (p)
{
MyStackNode *currentNode = p;
MyStackNode *frontNode = p->front;
if(currentNode != NULL)
{
free(currentNode);
currentNode = NULL;
}
p = frontNode;
}
stack->length = 0;
stack->base = stack->top = NULL;
}
void main()
{
MyStack *stack = MyStack_create();
MyStack_push(stack, 10);
MyStack_push(stack, 9);
MyStack_push(stack, 13);
MyStack_prinln(stack);
//
// MyStack_pop(stack);
// MyStack_pop(stack);
// MyStack_pop(stack);
// MyStack_clear(stack);
// MyStack_prinln(stack);
}