数据结构部分

#include<iostream>
#include<cstdlib>
#include <stdio.h>

using namespace std;
typedef struct Node *PNode;
typedef struct Node
{
    int reg;
    int date;
    PNode previous;
    PNode next;
}Node;
Node *head;
typedef struct
{
    PNode head;
    PNode tail;
    int size;
}DList;
DList *a;
int init_list();
int insert_follow_reg(int reg,int value);
int delete_follow_reg(int reg);
int reload_follow_reg(int reg,int value);
void print_list();
int main()
{
    init_list();
    insert_follow_reg(9,0);
    //delete_follow_reg(8);
    reload_follow_reg(9,3);
    print_list();
}
int init_list()
{
    head=new(Node);
    head->next=NULL;
    head->previous=NULL;
    a=new(DList);
    a->head=head;
    a->tail=NULL;
    a->size=0;
}
int insert_follow_reg(int reg,int value)
{
    Node *p;
    p=new(Node);
    p->date=value;
    p->reg=reg;
    if(head->next==NULL)
    {
        head->next=p;
        p->next=NULL;
        p->previous=head;
        a->tail=p;
        a->size++;
    }
    else
    {
        if(p->reg<head->next->reg)
        {
            p->next=head->next;
            head->next->previous=p;
            head->next=p;
            p->previous=head;
        }
        else
        {
            int cnt=0;
            for(Node *q=head->next;q!=a->tail;q=q->next)
            {
                if(p->reg>q->reg && p->reg<q->next->reg)
                {
                        p->next=q->next;
                        q->next->previous=p;
                        q->next=p;
                        p->previous=q;
                        cnt=1;
                        a->size++;
                        break;
                }
            }
            if(cnt==0)
            {
                if(a->tail->reg < p->reg)
                {
                    p->next=a->tail->next;
                a->tail->next=p;
                p->previous=a->tail;
                a->tail=p;
                a->size++;
                }

            }
        }

    }
}
int delete_follow_reg(int reg)
{
    int cnt=0;
    for(Node *q=head->next;q!=NULL;q=q->next)
    {
        if(q->reg==reg)
        {
            cnt=1;
            q->previous->next=q->next;
            q->next->previous=q->previous;
        }
    }
    if(cnt==0)
    {
        printf("没有此序号\n");
    }
}
int reload_follow_reg(int reg,int value)
{
    int cnt=0;
    for(Node *q=head->next;q!=NULL;q=q->next)
    {
        if(q->reg==reg)
        {
            cnt=1;
            q->date=value;
        }
    }
    if(cnt==0) cout<<"没有此序号"<<endl;
}
void print_list()
{
    for(Node *q=head->next;q!=NULL;q=q->next)
    {
        cout<<q->reg<<" "<<q->date<<endl;
        //cout<<a->tail->reg<<endl;

    }
    printf("a->size = %d\n",a->size);
}
时间: 2024-12-28 21:31:52

数据结构部分的相关文章

STL 数据结构部分原创入门教程,要详细资料请百度

数据结构部分 数据结构,按理而言是要计科的孩纸学一年,物联网的孩纸学半年的.不过,咱们也不需要那么细致的学习,其实太多的知识是能用就行的,现在让我们用一节课来ko基础的数据结构. 数据结构是是什么呢,简单的理解就是数据如何的存储结构.我们之前学习过链表,那么实际上大多数的数据结构都是由链表来加以改装来实现, 首先是list 双向链表,这个熟悉吧! 一定要注意其实容器都是类似的,学好一个后面的就刷刷会了. 头文件是 #include <list> 定义是  list <int> l1

《Java程序员面试宝典》学习笔记(数据结构部分)

有一千万行重复的短信,以文本文件的形式保存,一行一条,有重复.如何找出重复次数最多的10条? 可以用哈希表的方法对1千万条分成若干组进行边扫描边建散列表.第一次扫描,取首字节,尾字节,中间随便两字节作为Hash Code,插入到hash table中.并记录其地址和信息长度和重复次数,1千万条信息,记录这几个信息还放得下.同Hash Code且等长就疑似相同,比较一下.相同记录只加1次进hash table,但将重复次数加1.一次扫描以后,已经记录各自的重复次数,进行第二次hash table的

c#进程之间对象传递方法

1. 起源 KV项目下载底层重构升级决定采用独立进程进行Media下载处理,以能做到模块复用之目的,因此涉及到了独立进程间的数据传递问题. 目前进程间数据传递,多用WM_COPYDATA.共享dll.内存映射.Remoting等方式.相对来说,WM_COPYDATA方式更为简便,网上更到处是其使用方法. 而且Marshal这个静态类,其内置多种方法,可以很方便实现字符串.结构体等数据在不同进程间传递. 那么,对象呢?如何传递? 2.序列化 想到了,Newtonsoft.Json.dll这个神器.

算法导论13:双向循环链表 2016.1.13

今天这个又打了很长时间,本来觉得数据结构就是那样,不过是一种思维,但是实际上真正自己打和想象中差距还是很大,需要考虑到各种细节. 今天这个问题有一个比较有意思的应用,就是“约瑟夫环问题”. 具体可以参见百度百科: http://baike.baidu.com/link?url=poA1Aanlptc6yzP1puYhSw_0RQjRAplhPfHwk6eoiqMNxw6WigCEbexxZ8a9SUbrMGokpPbKNzVYw308xjeEw_ 读完问题就可以发现,这个问题用链表就是一个很完美

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

Linux 内核开发——内核简介

内核简介 Linux 构成 Linux 为什么被划分为系统空间和内核控件 隔离核心程序和应用程序,实现对核心程序的保护,如保护操作系统本身的保护. 什么内核空间,用户空间 内核空间和用户空间是程序运行的两种不同的状态,Linux对自身软件系统进行了划分,一部分核心的软件独立于普通的软件,拥有特权级别,能够访问平台的所有硬件和资源,称为"内核空间".而普通的软件运行在"用户空间",它只拥有有限的系统资源,不能直接访问内核空间和硬件资源. 将系统分为"内核空间

使用腾讯云 GPU 学习深度学习系列之二:Tensorflow 简明原理【转】

转自:https://www.qcloud.com/community/article/598765?fromSource=gwzcw.117333.117333.117333 这是<使用腾讯云 GPU 学习深度学习>系列文章的第二篇,主要介绍了 Tensorflow 的原理,以及如何用最简单的Python代码进行功能实现.本系列文章主要介绍如何使用 腾讯云GPU服务器 进行深度学习运算,前面主要介绍原理部分,后期则以实践为主. 往期内容: 使用腾讯云 GPU 学习深度学习系列之一:传统机器学

《数据结构与算法-Javascript描述》

今年的上半年,项目原因大部分时间在写js,这期间把easyui,echarts,bootstrap都用了点皮毛,写的多了,自然也多了些感觉,不过仅局限于运用层面,于是决定再系统的看些javascript方面的书,强化运用能力,便有了这本~来自于国内知名公司前端工程师翻译自国外的书,见名知意用Javascript角度来讲数据结构和算法,一方面可以把javascript的基础知识加强,一方面加深数据结构以及算法的理解和应用. 全书篇幅不长,第一章简明扼要对javascript做了简单的介绍,基本语法

C++ 基础知识复习(三)

43. 继承的几种方式: 答:共有继承public,保护继承protected,私有继承private.其中后两种继承会改变原有的访问级别. 44. 深复制与浅复制: 答:简单理解,深复制自己申请了内存,浅复制直接把地址抄了过去. 45. C++是否支持参数个数不确定: 答:支持,可以使用隐藏参数机制来实现. 46. 什么是内联函数: 答:在类声明内部声明或定义叫做内联函数,为了解决函数调用的效率问题.类声明内部声明,外部定义,叫做显示内联函数,在类声明内部定义叫做隐式内联函数.内联函数不允许使