目录
一、结构体
1.栈顶指针节点
typedef struct
{
int count;
node top;
}TOP,*top;
2.栈中节点
typedef struct node_stack
{
int data;
struct node_stack *next;
} Node_stack, *node;
二、判空
int empty_linkstack(top P)
{
if (P == NULL)
{
printf("入参为空\n");
return -1;
}
return P->top == NULL ? 1 : 0;
}
三、创建
1.栈顶指针节点
top create_linkstack()
{
top P = (top)malloc(sizeof(TOP));
if (P == NULL)
{
printf("栈顶节点失败\n");
return NULL;
}
printf("栈顶节点成功\n");
P->count = 0;
P->top = NULL;
return P;
}
2.创建栈中节点
node create_node(int data)
{
node P = (node)malloc(sizeof(Node_stack));
if (P == NULL)
{
printf("子节点失败\n");
return NULL;
}
P->data = data;
return P;
}
四、入栈(头插)
void push_linkstack(top P, int data)
{
if (P == NULL)
{
printf("入参为空\n");
return;
}
node newnode = create_node(data);
newnode->next = P->top;
P->top = newnode;
P->count++;
}
五、出栈(头删)
int pop_linkstack(top P)
{
if (P == NULL)
{
printf("入参为空\n");
return -1;
}
if (!empty_linkstack(P))
{
int data = P->top->data;
node delenode = P->top;
P->top = delenode->next;
free(delenode);
P->count--;
return data;
}
printf("栈为空,无法出栈\n");
return -1;
}
六、打印
void print_linkstack(top P)
{
if (P == NULL)
{
printf("入参为空\n");
return;
}
if (empty_linkstack(P))
{
printf("栈为空\n");
return;
}
node q = P->top;
while (q != NULL)
{
printf("P->data=%d\n", q->data);
q = q->next;
}
}
七、清空
void clean_linkstack(top P)
{
if (P == NULL)
{
printf("入参为空\n");
return;
}
if (empty_linkstack(P))
{
printf("栈为空\n");
return;
}
node dele = P->top;
while (dele != NULL)
{
P->top = dele->next;
dele = dele->next;
free(dele);
P->count--;
}
dele = NULL;
if (P->top == NULL)
{
printf("链栈已清空\n");
}
}
八、销毁
void destory_linkstack(top *P)
{
if (P == NULL ||*P == NULL)
{
printf("入参为空\n");
return;
}
if (empty_linkstack(*P))
{
free(*P);
*P =NULL;
printf("链栈已销毁\n");
return;
}
clean_linkstack(*P);
free(*P);
*P =NULL;
printf("链栈已销毁\n");
}