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

Posted nynjist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话数据结构书中的代码实现相关的知识,希望对你有一定的参考价值。

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

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
",head);
    while(1)
    {
        scanf("%d",&(p->date));
        if(p->date == 0)
            break;
        q = (Node *)malloc(sizeof(Node));
        printf("%d
",p->date);
        p->next = q;
        p = q;
        printf("%d
",p);
    }
    p->next = NULL;
    p =head;

    while(p->next != NULL)
    {

        printf("%d
",p->date);
        p = p->next;
    }
    printf("%d
",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
",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
",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);
}

 

以上是关于大话数据结构书中的代码实现的主要内容,如果未能解决你的问题,请参考以下文章

代码无错就是优? - 读《大话设计模式》笔记

《大话数据结构》读后感——第一章

大话设计模式读书笔记--23.访问者模式

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

Python《大话设计模式》Python版代码实现

《大话设计模式》Python版代码实现