#define MAX_SIZE 255#define true 1#define false 0typedef struct { int id; char * name;}ElementType;
#include <stdio.h>#include<stdlib.h>#include "Element.h"//链栈的结点typedef struct StackNode{ ElementType data;//结点中保存的元素 struct StackNode *next;//指向下个结点的指针}StackNode;//链栈结构typedef struct LinkedStack{ StackNode *top;//栈顶指针 int length;//链栈的长度(元素个数)}LinkedStack;//链栈的初始化void InitLinkedStack(LinkedStack *linkedStack);//链栈的压栈,并返回结果int PushLinkedStack(LinkedStack * linkedStack,ElementType element);//链栈的出栈int PopLinkedStack(LinkedStack * linkedStack,ElementType * element);//清空栈void ClearLinkedStack(LinkedStack * linkedStack);//销毁栈void DestroyLinkedStack(LinkedStack * linkedStack);
#include "LinkedStack.h"//链栈的初始化void InitLinkedStack(LinkedStack *linkedStack){ linkedStack->top=NULL; linkedStack->length=0;}//链栈的压栈,并返回结果//链栈压栈不存在满栈的情况,没有规定栈长。int PushLinkedStack(LinkedStack * linkedStack,ElementType element){ //创建一个新结点 StackNode *newNode=(StackNode *)malloc(sizeof(StackNode)); newNode->data=element; //新结点的next指向当前的栈顶 newNode->next=linkedStack->top; linkedStack->top=newNode; linkedStack->length++; return true;}//链栈的出栈//定义一个临时指针结点,来记录原栈顶结点int PopLinkedStack(LinkedStack * linkedStack,ElementType * element){ if(linkedStack->top==NULL){ printf("空栈,出栈操作失败"); return false; } //返回栈顶元素 *element=linkedStack->top->data; //记录出栈操作前的栈顶指针 StackNode * node=linkedStack->top; //栈顶指针下移一位 linkedStack->top=linkedStack->top->next; //释放原栈顶空间 free(node); linkedStack->length--; return true;}//清空栈,遍历栈中的每一个元素并释放结点空间void ClearLinkedStack(LinkedStack * linkedStack){ StackNode *tempNode;//临时变量 while(linkedStack->top){ tempNode=linkedStack->top;//栈顶指向下一个元素 linkedStack->top=linkedStack->top->next; free(tempNode); linkedStack->length--; }}//销毁栈//先清空栈,再销毁栈void DestroyLinkedStack(LinkedStack * linkedStack){ ClearLinkedStack(linkedStack); free(linkedStack); linkedStack=NULL;}
#include <iostream>using namespace std;#include "LinkedStack.h"ElementType datas[]={ {1,"哈哈哈"}, {2,"哇哇哇"}, {3,"呵呵呵"}, {4,"啦啦啦"}};void TestSeqStack();int main(){ TestSeqStack();}void TestSeqStack(){ LinkedStack * stack=(LinkedStack *)malloc(sizeof(LinkedStack)); ElementType *element=(ElementType *)malloc(sizeof(ElementType)); InitLinkedStack(stack); for(int i=0;i<4;i++){ printf("当前入栈:%d\t%s\n",datas[i].id,datas[i].name); PushLinkedStack(stack,datas[i]); } PopLinkedStack(stack,element); printf("当前出栈的元素:%d\t%s\n",element->id,element->name); PopLinkedStack(stack,element);}