#include <stdio.h>
#include "stdbool.h"
#include "malloc.h"
#include "assert.h"
#define LinkElemtype int
typedef struct LinkStackNode
{
LinkElemtype data;
struct LinkStackNode* next;
}LinkStackNode;
typedef struct LinkStack
{
LinkStackNode* head;
}LinkStack;
// 初始化栈
void LinkStackInit(LinkStack* ps);
// 入栈
void LinkStackPush(LinkStack* ps, LinkElemtype v);
// 出栈
void LinkStackPop(LinkStack* ps);
// 获取栈顶元素
int LinkStackTop(LinkStack* ps);
//显示
void LinkStackshow(LinkStack* ps);
//求长度
int Getlength(LinkStack* ps);
//摧毁链栈
void LinkStackDestroy(LinkStack *ps);
//判空
bool LinkEmpty(LinkStack* ps)
{
assert(ps != NULL);
return ps->head == NULL;
}
void LinkStackInit(LinkStack* ps)
{
assert(ps != NULL);
ps->head = NULL;
}
void LinkStackPush(LinkStack* ps,LinkElemtype v)
{
assert(ps != NULL);
LinkStackNode* s = (LinkStackNode*)malloc(sizeof(LinkStackNode));
assert(s!= NULL);
s->data = v;
s->next = ps->head;
ps->head = s;
}
void LinkStackPop(LinkStack* ps)
{
assert(ps != NULL);
if (LinkEmpty(ps))
{
printf("栈空");
return;
}
LinkStackNode* p = ps->head;
ps->head = p->next;
}
void LinkStackshow(LinkStack* ps)
{
assert(ps != NULL);
LinkStackNode* p = ps->head;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
int LinkStackTop(LinkStack* ps)
{
assert(ps != NULL);
if (LinkEmpty(ps))
{
printf("栈空");
return 0;
}
return ps->head->data;
}
int Getlength(LinkStack* ps)
{
assert(ps != NULL);
int length = 0;
LinkStackNode *p = ps->head;
while(p!=NULL)
{
length++;
p = p->next;
}
return length;
}
void LinkStackDestroy(LinkStack *ps)
{
assert(ps != NULL);
LinkStackNode *p = ps->head,*q;
while (p!= NULL)
{
q=p;
p=p->next;
free(q);
}
}
int main()
{
LinkStack st;
LinkStackInit(&st);
LinkStackPush(&st, 1);
LinkStackPush(&st, 3);
LinkStackPush(&st, 5);
LinkStackPush(&st, 7);
LinkStackPush(&st, 9);
LinkStackPush(&st, 10);
LinkStackshow(&st);
printf("\n");
LinkStackPop(&st);
LinkStackshow(&st);
printf("\n");
LinkStackTop(&st);
LinkStackshow(&st);
printf("\n");
printf("链栈的长度为:%d",Getlength(&st));
return 0;
}
11-22
3921