Двунаправленное кольцо С++
Такая история. Сдавала в универе работу по классам.
Цитата:
Разработать класс реализующий список (двунаправленное кольцо). Элемент списка содержит информацию о товаре на складе фирмы. Элемент очереди содер-жит наименование товара, цену, количество и дату поставки. В классе реализовать методы поставки на склад, отгрузки со склада и формирования информации по выбранному товару.
|
Преподу не понравилось решение. Сказал, что это двунаправленная очередь, а ему надо кольцо. Собственно вопрос: как переделать код, что бы было это кольцо(а то что-то в гугле даже про это ничего толкового нету, а решить надо побыстрее).
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Data{
Data *Next, *Prev;
string Name;
int Price, Count;
int Day, Month, Year;};
class List{
protected:
Data *Head, *Tail;
int Size;
public:
List() {
Head = NULL;
Tail = NULL;
Size = 0; };
List(Data InputData) {
Data *curdata = new Data;
curdata->Year = InputData.Year;
curdata->Month = InputData.Month;
curdata->Day = InputData.Day;
curdata->Price = InputData.Price;
curdata->Count = InputData.Count;
curdata->Name = InputData.Name;
curdata->Prev = NULL;
Head = Tail = curdata;
Size = 1; };
List(List &data)
{
Head = NULL;
*this = data; };
~List() {
while (Head) {
Tail = Head->Next;
delete Head;
Head = Tail; };
};
void Show(int No)
{
Data *curdata = new Data;
curdata = Head;
if (No>Size) exit; else
{
for (inti = 0; i<No - 1; i++)
{
if (curdata->Next != NULL)
curdata = curdata->Next;
};
cout<< "Наименованиетовара:" <<curdata->Name.c_str() <<endl;
cout<< "Количество:" <<curdata->Count << "\t Цена:" <<curdata->Price <<endl;
cout<< "Дата поставки:" <<curdata->Day<< "." <<curdata->Month << "." <<curdata->Year <<endl;}; };
void Delete(int No) {
if (No>Size) exit;
Size--;
Data *curdata = new Data;
curdata = Head;
for (inti = 0; i<No - 2; i++)
curdata = curdata->Next;
if (curdata->Next->Next == NULL)
curdata->Next = NULL;
else
curdata->Next = curdata->Next->Next;
};
void Add(Data InputData) {
Data *curdata = new Data;
curdata->Year = InputData.Year;
curdata->Month = InputData.Month;
curdata->Day = InputData.Day;
curdata->Price = InputData.Price;
curdata->Count = InputData.Count;
curdata->Name = InputData.Name;
curdata->Next = NULL;
Size++;
if (Head != NULL) {
curdata->Prev = Tail;
Tail->Next = curdata;
Tail = curdata; }
else
{
curdata->Prev = NULL;
Head = Tail = curdata; };};};
int _tmain(intargc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
Data good;
good.Name = "Перфоратор";good.Count = 120;good.Price = 3500000;good.Day = 11;
good.Month = 02;good.Year = 2014;
List Goods(good);
good.Name = "Шуруповрт"; good.Count = 50;good.Price = 1225000; good.Day = 12;
good.Month = 02; good.Year = 2014;
Goods.Add(good);
good.Name = "Дрель";good.Count = 150; good.Price = 125000;good.Day = 13;
good.Month = 02; good.Year = 2014;
Goods.Add(good);
Goods.Show(1);
Goods.Show(2);
Goods.Show(3);
Goods.Delete(2);
Goods.Show(1);
Goods.Show(2);
system("pause");
return 0;
}
|