大话数据结构书中的代码实现(1)

看大话数据结构这本书已经有一段时间了,目前看到了图的那一部分,对前面所学习的知识进行回顾和总结。

1.链表

因为计算机不会给你分配一个较大的连续的内存,当存储较多的数据时就需要把一些不连续的内存,通过指针去练习起来,链表其实就是,链表的实现又很多,双向链表,既每一个节点都会指向自己前面的一个值和后面的一个值,循环链表,最后一个值就指向第一个存储位置,它们的大概思想都是类似的。链表和连续的数组它们都各自有各自的优势,连续的存储结构方便于遍历,而如果删除和插入较多的话比较适合于用链表存储。我仅仅实现了创建和遍历的操作,添加和删除可以制定元素位置和值进行遍历即可。

#include<stdio.h>
#include<stdlib.h>

struct Node{
    int date;
    Node *next;
};

int main(){
    Node *head,*p,*q;
    head = p =(Node *)malloc(sizeof(Node));
    printf("%d\n",head);
    while(1)
    {
        scanf("%d",&(p->date));
        if(p->date == 0)
            break;
        q = (Node *)malloc(sizeof(Node));
        printf("%d\n",p->date);
        p->next = q;
        p = q;
        printf("%d\n",p);
    }
    p->next = NULL;
    p =head;

    while(p->next != NULL)
    {

        printf("%d\n",p->date);
        p = p->next;
    }
    printf("%d\n",head->date);
}

2.队列

队列是一种先进先出的数据结构,在链表的基础上,只需要创建一个结构体包含了头指针和尾指针,去指向整个队列的头和为去进行删除和增加就可以了,但要注意,当删除释放到最后一个节点时一定要记得去更改尾指针指向的地址,否者的话尾指针释放掉了就指向空了。

#include<stdio.h>
#include<stdlib.h>

struct Qnode {
    int date;
    Qnode *next;
};

struct QnodeList
{
    Qnode *Front,*Rear;
};

void Enqueue(QnodeList *q,int date)
{
    Qnode *new_node = (Qnode *)malloc(sizeof(Qnode));
    new_node->date = date;
    new_node->next = NULL;
    q->Rear->next = new_node;
    q->Rear = new_node;
    printf("%d\n",q->Rear->date);
    return ;
}
void Dequeue(QnodeList *q,int *value)
{
    if(q->Front == q->Rear)
    {
        printf("当前为空");
        return ;
    }
    Qnode *old_node;
    old_node = q->Front->next;
    q->Front->next = old_node->next;
    if(q->Rear == old_node)
    {
        q->Rear = q->Front;
    }
    printf("%d\n",old_node->date);
    free(old_node);
    return ;
}
int main()
{
    QnodeList hh;
    Qnode top;
    int value;

    hh.Front = &top;
    hh.Rear = &top;
    Enqueue(&hh,5);
    Enqueue(&hh,6);
    Enqueue(&hh,7);
    Dequeue(&hh,&value);
    Dequeue(&hh,&value);
    Dequeue(&hh,&value);
    Dequeue(&hh,&value);
}

原文地址:https://www.cnblogs.com/nyNJist/p/11594693.html

时间: 2024-08-06 10:17:19

大话数据结构书中的代码实现(1)的相关文章

【Java】 大话数据结构(2) 线性表之单链表

本文根据<大话数据结构>一书,实现了Java版的单链表. 书中的线性表抽象数据类型定义如下(第45页): 实现程序: package LinkList; /** * 说明: * 1.<大话数据结构>中没有线性表的长度,但提到可以存储于头节点的数据域中. * 本程序的线性表长度存放于count变量中,线性表长度可以使程序比较方便. * 2.程序中,第i个位置代表第i个结点,头结点属于第0个结点 * 3.因为链表为泛型,整表创建采用整型(随机整数做元素),所以有出现一些类型转换 * 4

Egret入门学习日记 --- 第二十八篇(书中 9.19 ~ 9.19 节 内容)

第二十八篇(书中 9.19 节 内容) 没想到第九章的组件篇可真是够长的,没事,慢慢来吧. 开始 9.19节. 重点: 1.创建一个Tips提示组件. 操作: 1.创建一个Tips提示组件. 哇!出大问题!这个Tips组件有点牛皮!怎么办? 书中内容这部分,我直接懵逼. 还有这部分也是. 一点一点来分析好吧. 好,开始分析一波. 第一步:查看最终展示效果. 这是最终效果.(我去,我现在才知道,原来博客园的编辑器还可以放Gif图片...) 第二步:这个黑色的弹框组件本质上是由什么构成的? 可见,在

CSAPP 书附带的代码中找不到的 config.h 在此给出(坑爹啊。。。)

原本是在实现malloc的过程中要有个#include "config.h" 但是怎么找都找不到,只要google,还好有好心人给出了config.h 不然我怎么都不明白HEAP_MAX究竟是多少.... #ifndef __CONFIG_H_ #define __CONFIG_H_ /* * config.h - malloc lab configuration file * * Copyright (c) 2002, R. Bryant and D. O'Hallaron, All

图的基础算法(大话数据结构笔记)

概述 线性表的每个元素有线性关系,每个数据元素只有一个直接前去和一个直接后继.树的数据元素之间有着明细那的层次关系,并且每层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关.这和一对父母可以有很多孩子,但每个孩子却只能有一对父母是一个道理.可现实中,人与人之间关系复杂,不是简单一对一,一对多的关系.这种复杂关系更适合用图来表示.在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关.如下图所示:无向边:Edge (vi,vj)有向边:也叫弧,Arc. <v

【Java】 大话数据结构(6) 线性表之栈

本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所示.   1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针).一个长度为5的栈的示意图如下: 实现程序: /** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * @author Yongh * */ public class SqStac

【广告】《大话数据结构》在多看书城6月6日中午12点至晚上24点特价销售:0.99元

因多看书城成立两周年举办大促销活动,所以我的图书< 大话数据结构 > 电子版于6月6日中午12点至晚上24点特价销售:0.99元(听说新注册用户送3元,这样就等于一分不花了). 购买地址:http://www.duokan.com/book/44279 希望有兴趣了解和学习数据结构的读者前去购买. 坦白说,对于过去购买<大话数据结构>纸质书的读者,特别是前三次印刷的读者,我是一直心存歉意的.因为我的写作能力有限,加上编辑的疏忽,造成纸质版印刷有不少的错误,尽管大多数读者都给予了好评

【《Effective C#》提炼总结】提高Unity中C#代码质量的22条准则

本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/53869998 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 引言 我们知道,在C++领域,作为进阶阅读材料,必看的书是<Effective C++>. 而<Effective C#>之于C# ,是类似<Effective C++>之于C++一样的存在. 这篇文章,

大话Linux内核中锁机制之RCU、大内核锁

大话Linux内核中锁机制之RCU.大内核锁 在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL).文章的最后对<大话Linux内核中锁机制>系列博文进行了总结,并提出关于目前Linux内核中提供的锁机制的一些基本使用观点. 十.RCU机制 本节将讨论另一种重要锁机制:RCU锁机制.首先我们从概念上理解下什么叫RCU,其中读(Read):读者不需要获得任何锁就可访问RCU保护的临界

大话数据结构读书笔记

大话数据结构读书笔记 编程基础: 数据结构 算法 1 线性表 //顺序储存结构的结构代码: #define MAXSIZE 20//储存空间的起始分配量 typedef int ElemType;//ElemType类型根据实际类型而定,这里假设是int typedef struct{ ElemType data[MAXSIZE];//数组储存元素,最大值为MAXSIZE int length;/线性表当前长度: }SqList; //顺序存储结构需要三个属性: //1存储空间的起始位置:数组d