栈的链表存储实现(纯代码演示)
一点废话
昨天写的线性表的链表存储弄得我自己突然来了想法,打算把上学期自己学的数据结构的知识好好复习一下。
也正好打算从WordPress的自建博客慢慢迁移到博客园来,好好熟悉一下这个cnblogs的编辑器。(事实证明,好的文章排版是非常重要的)
目前的计划是“线性表->堆栈->队列->树->图”,这些基本的数据结构弄完之后,就准备开始弄一下基本的排序算法,啊哈哈哈
文件概述
- stack.h 存放栈(栈结点结构以及结点指针),并对栈的操作函数进行声明
- stack.c 对之前在stack.h中声明的栈的操作函数进行定义
代码
stack.h
typedef int ElementType; typedef struct SNode *Stack; struct SNode{ Stack Next; ElementType Data; }; //Stack has header-Node Stack CreateStack(); //生成空堆栈 void Push(Stack S,ElementType item); //将元素 item 压入堆栈 int IsEmpty(Stack S); //判断堆栈 S 是否为空 ElementType Pop(Stack S); //删除并返回栈顶元素
stack.c
#include <stdio.h> #include <stdlib.h> #include "stack.h" //生成空堆栈 Stack CreatStack(){ Stack tempStack = (Stack)malloc(sizeof(struct SNode)); tempStack->Next = NULL; return tempStack; } //判断是否为空 int IsEmpty(Stack S){ return (S->Next == NULL); } //将元素 item 压入堆栈 void Push(Stack S,ElementType item){ Stack tempStack = (Stack)malloc(sizeof(struct SNode)); tempStack->Data = item; tempStack->Next = S->Next; S->Next = tempStack; } //删除并返回栈顶元素 ElementType Pop(Stack S){ if(IsEmpty(S)){ printf("Error"); return; } Stack tempStack = S->Next; ElementType popValue = tempStack->Data; S->Next = tempStack->Next; free(tempStack); return popValue; }