RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 798272
Accepted
Johnny Rage
Johnny Rage
Asked:2020-03-15 00:28:14 +0000 UTC2020-03-15 00:28:14 +0000 UTC 2020-03-15 00:28:14 +0000 UTC

如何获取存储在动态结构记录中的数据

  • 772

问题如下。我需要在 TakeElement 方法中使用 m 来获取存储在动态结构中的数字。它是数字本身,而不是它的链接。我怎样才能做到这一点? 有错误的截图

            #pragma once
            #include "vset.h"
            #include <iostream>
            #include <set>
            using namespace std;
            /*

            Собирать множества можно по такому принципу
            В случае сложения
            Собираем в третье множество сначала первую цепочку, а затем вторую. Далее уничтожаем дубликаты, а затем обновляем индентификаторы.
            В случае логическиго И мы
            Сравниваем элементы и их IDы. Если они равны, то записываем их в третью цепочку.
            В случае разности множеств мы Складываем две цепочки в которых делаем очищение от дубликатов. Затем в Третьей цепочки спускаемся вниз.
            Во время спуска будет происходить т.н. перебор по счётчику(Да Долго). То бишь мы берём первый элемент и сравниваем с остальными. Если попались дубликаты, то мы их удаляем. 
            Затем уничтожаем первый элемент. Обновляем Индентификаторы. Идём сначала и так до тех пор пока не дойдём до конца множества. Флаг конца множества - указатель на следующий элемент равный NULL

            */
            vset::SingleList * vset::MakeFirst(int d)
            {
                SingleList *cRec = new SingleList;
                cRec->Data = d; cRec->Id = 0; cRec->next = 0; cRec->prev = 0;

                return cRec;
            }

            void vset::AddElement(vset::SingleList **last, int d)
            {
                vset::SingleList *cRec = new SingleList;
                cRec->Data = d; cRec->next = 0; cRec->prev = *last;
                (*last)->next = cRec;
                *last = cRec;
                RefreshIds(vset::ihead);
            }

            vset::SingleList * vset::Search(SingleList * const pbeg, int d)
            {
                SingleList *cRec = pbeg;
                while (cRec)
                {
                    if (cRec->Data == d)break;
                    cRec = cRec->next;
                }
                return cRec;
            }
            vset::SingleList * vset::SearchId(SingleList * const pbeg, int id)
            {
                SingleList *cRec = pbeg;
                while (cRec)
                {
                    if (cRec->Id == id)break;
                    cRec = cRec->next;
                }
                return cRec;
            }

            int vset::TakeElement(vset::SingleList *Rec)
            {
                int m = 0;
                m = Rec->Data;
                return m;
            }
            bool vset::Remove(vset::SingleList **head, vset::SingleList **last, int key)//его нужно перегрузить
            {
                if (SingleList *pkey = Search(*head, key))
                {
                    if (pkey == *head)
                    {
                        *head = (*head)->next;
                        (*head)->prev = 0;
                    }
                    else if (pkey == *last)
                    {
                        *last = (*last)->prev;
                        (*last)->next = 0;
                    }
                    else {
                        (pkey->prev)->next = pkey->next;
                        (pkey->next)->prev = pkey->prev;
                    }
                    delete pkey;
                    return true;
                }
                return false;
            }
            bool vset::RemoveId(vset::SingleList **head, vset::SingleList **last, int id)//его нужно перегрузить
            {
                if (SingleList *pkey = SearchId(*head, id))
                {
                    if (pkey == *head)
                    {
                        *head = (*head)->next;
                        (*head)->prev = 0;
                    }
                    else if (pkey == *last)
                    {
                        *last = (*last)->prev;
                        (*last)->next = 0;
                    }
                    else {
                        (pkey->prev)->next = pkey->next;
                        (pkey->next)->prev = pkey->prev;
                    }
                    delete pkey;
                    return true;
                }
                return false;
            }

            void vset::PrintList(vset::SingleList * const head)
            {
                vset::SingleList *cRec = head;
                while (cRec)
                {
                    cout << cRec->Data <<" ";
                    cRec = cRec->next;
                }
            }
            void vset::DestroyDublicats(vset::SingleList * const head)
            {
                /*
                Берём первый элемент множества и сравниваем с последующими. Найденные дубликаты уничтожаем. Обновляем IDы
                */
                vset::SingleList *cRec = head;//cRec - указатель на захваченный элемент множества который мы будем сравнивать с вторым указателем. Сокращение от Current Record
                vset::SingleList *tRec = head;//tRec - указатель на сравниваемый элемент множества с которым мы будем сравнивать первый указатель. Сокращение от Temporary Record
                while (cRec)
                {
                    while (tRec)
                    {
                        if (tRec->next != NULL)
                        tRec = tRec->next;
                        else break;
                        if ((cRec->Data == tRec->Data) && (cRec->Id != tRec->Id))
                        {
                            int tId = tRec->Id;
                            vset::RemoveId(&ihead, &ilast, tId);
                            break;
                        }

                    }
                    tRec = head;
                    if (cRec->next != NULL)
                        cRec = cRec->next;
                    else break;

                }
                RefreshIds(ihead);
            }
            vset vset::Combine(vset::SingleList * const head, class vset &sSet)
            {
                this->cRec1 = head;
                this->cRec2 = sSet.ihead;
                vset nSet(cRec1->Data);
                cRec1->next;
                int num = 0;
                num = TakeElement(cRec1);
                while (cRec1)
                {
                    nSet.AddElement(num);
                }

            }
            void vset::PrintIds(vset::SingleList * const head)
            {
                vset::SingleList *cRec = head;
                while (cRec)
                {
                    cout << cRec->Id << " ";
                    cRec = cRec->next;
                }
            }

            void vset::RefreshIds(vset::SingleList * const head)
            {
                int Id = 0;
                vset::SingleList *cRec = head;
                while (cRec)
                {
                    cRec->Id = Id;
                    Id++;
                    cRec = cRec->next;
                }
            }

            vset::vset()
            {
                SingleList *ihead = MakeFirst(0);
                SingleList *ilast = ihead;
            }

             vset::vset(int d)
            {
                ihead = MakeFirst(d);
                ilast = ihead;
            }

            vset::~vset()
            {
            }
c++
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Johnny Rage
    2020-03-15T00:33:32Z2020-03-15T00:33:32Z

    我的问题的解决方法在于我自己的粗心。我首先尝试调用的 AddElement 方法采用指向线性列表尾部的指针,然后才指向要添加的值。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5