算法:C语言实现 (4)下推栈的链表实现


一 通用数据类型的定义

不依赖于对象类型的代码,其中我们使用typedef来制定项的类型.

typedef int Item;

#define eq(A,B) (A == B)

二 接口的定义

接口中并不包含如何实现函数的信息,甚至也没有关于任何关于任何运行的信息。p79页重点讲解“接口”,还有就是接口的作用..在接口中明确定义了算法在通用对象上执行所需的操作。这种机制允许我们无需向客户程序提供关于数据表示的任何信息,也就真正给了我们一个真实的ADT

void STACKinit(int);
int STACKempty(void);
void STACKpush(Item);
Item STACKpop();

三 接口的实现

#include <stdlib.h>
#include "item.h"

typedef struct STACKnode * link;
struct STACKnode {Item item; link next;};

/************************************************************************/
/* 设置一个指向头结点地址不变的   头指针head                                 */
/************************************************************************/
static link head;

link NEW(Item item, link next)
{
    link x = (link) malloc(sizeof(*x));
    x->item = item;
    x->next = next;
    return x;
}

void STACKinit(int maxN)
{
    head = NULL;
}

int STACKempty()
{
    return head == NULL;
}

/************************************************************************/
/* 压入栈的时候, 设定了一个不变的头指针, 然后每次都会依次让这个头指针指向新插入的节点  */
/************************************************************************/
void STACKpush(Item item)
{
    head = NEW(item,head);
}

/************************************************************************/
/* 弹出栈的时候, 就把head所指的节点数据弹出    */
/************************************************************************/
Item STACKpop()
{
    Item item = head->item;
    link t = head->next;
    free(head);
    head = t;
    return item;
}

优质内容筛选与推荐>>
1、你找到生命中最重要的那件事了吗?
2、webpack+vue在dev和production模式下的小小区别
3、【RL-TCPnet网络教程】第5章PHY芯片和STM32的MAC基础知识
4、自然框架的声明
5、如何使用腾讯云云硬盘API


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn