完整代码
目录
ChainedStack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int DataType;
typedef struct snode
{
DataType data;
struct snode* next;
}LSNode;
//初始化
void StackInitiate(LSNode** head);
//非空否
int StackNotEmpyt(LSNode* head);
//入栈
void StackPush(LSNode* head, DataType x);
//出栈
int StackPop(LSNode* head, DataType* d);
//读取栈顶元素
int StackGet(LSNode* head, DataType* d);
//撤销堆栈
void Destory(LSNode** head);
ChainedStack.c
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include"ChainedStack.h";
void StackInitiate(LSNode** head)
{
*head = (LSNode*)malloc(sizeof(LSNode));
(*head)->next = NULL;
}
int StackNotEmpty(LSNode* head)
{
if (head->next == NULL)
{
printf("堆栈为空");
return 0;
}
else
{
return 1;
}
}
void StackPush(LSNode* head, DataType x)
{
LSNode* p;
p = (LSNode*)malloc(sizeof(LSNode));
p->data = x;
p->next = head->next;
head->next = p;
}
int StackPop(LSNode* head, DataType* d)
{
if (head->next == NULL)
{
printf("堆栈为空");
return 0;
}
else
{
LSNode* p;
p = head->next;
head->next = p->next;
free(p);
return 1;
}
}
int StackTop(LSNode* head, DataType* d)
{
LSNode* p;
p = head->next;
if (p == NULL)
{
printf("堆栈为空");
return 0;
}
else {
*d = p->data;
return 1;
}
}
void Destory(LSNode* head)
{
LSNode* p, * p1;
p = head;
while (p != NULL) {
p1 = p;
p = p->next;
free(p1);
}
}