• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

栈的链表存储实现(纯代码演示)

开发技术 开发技术 1周前 (09-13) 20次浏览

一点废话

昨天写的线性表的链表存储弄得我自己突然来了想法,打算把上学期自己学的数据结构的知识好好复习一下。

也正好打算从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;
}

 


喜欢 (0)