Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

удаление эл-тов связаного списка

29K
12 июня 2008 года
kermit
11 / / 16.01.2008
Здравствуйте)

небоходимо написать программу
Цитата:
Разработайте класс, реализующий линейный односвязный список. Методы класса: вставка элемента после n-го элемента списка, просмотр списка, удаление 3-х элементов списка, начиная с n-го. Поля записей: номер учебной группы, предмет изучения, количество часов, тип проводимых занятий



а поскольку к изученью объектного програм. я начал только сегодня, я не знаю как удалить 3 эл-та списка начиная с n-го.

Все остальное вроде удалось:)

Вот что у меня получилос:

Код:
#include "stdafx.h"

using namespace std;
class GroupDataSet
{
public:
    int GroupNumber;
    char Predmet[60];
    char lessonsType[60];
    int hoursNumber;
    GroupDataSet* pNext;
};

GroupDataSet* pHead=0;

void addTail(GroupDataSet* pGDS)
{
    pGDS -> pNext =0;
    if(pHead==0)
    {
        pHead=pGDS;
        return;
    }
    GroupDataSet* pCurrent=pHead;
    while(pCurrent -> pNext)
    {
        pCurrent = pCurrent->pNext;
    }
    pCurrent->pNext=pGDS;
}
GroupDataSet* getData()
{
    GroupDataSet* pGDS = new GroupDataSet;
    cout<<"\n Input group number: ";
    cin>> pGDS->GroupNumber;
    if(pGDS->GroupNumber ==0)
    {
        delete pGDS;
        return 0;
    }  
    cout<<"\n Input lesson:";
    cin>>pGDS->Predmet;
    cout<<"\n Input hours number:";
    cin>>pGDS->hoursNumber;
    cout<<"\n Input lesson type:";
    cin>>pGDS->lessonsType;
    pGDS->pNext=0;
//  clrscr();
    system("cls");
    return pGDS;
}
void displayData(GroupDataSet* pGDS)
{
    cout<<" Group number: "<< pGDS->GroupNumber<<endl;
    cout<<" Lesson: "<<pGDS->Predmet<<endl;
    cout<<" Hours number: "<< pGDS->hoursNumber<<endl;
    cout<<" Lesson type: "<< pGDS->lessonsType<<endl;
}

int main()
{
    int key;

    cout<<"\n For quit, input in to the field `Group number` - null"<<endl;
    GroupDataSet* pGDS;
    do
    {
        system("cls");
    cout<<"\n 1-add group;"<<endl;
    cout<<"\n 2-delete group;"<<endl;
    cout<<"\n 3-view all groups;\n"<<endl;
    cout<<"-->";
    key=getch();
    //getch();
    cout<<endl;
    //GroupDataSet* pGDS;
    if(key==49)
    {
    while(pGDS=getData())
    {
        //Добавление эл-та в конец списка объектов
        addTail(pGDS);
    }
    }
    //поочередно выведем все элементы списка
    //(выполнение прекратится, когда указатель
    //на следующий элемент будет равен нулю)
    if(key==51)
    {
    cout<<" Elements:"<<endl;
    cout<<endl;
    pGDS=pHead;
    while(pGDS)
    {
        //отобразим текущий элемент
        displayData(pGDS);
        //получим адрес следующего элемента
        pGDS= pGDS->pNext;
        cout<<"--------------------------------"<<endl;
        getch();
       
    }
    }
//  clrscr();
   
    }while(key!=27);

    system("PAUSE");
    return 0;
}


Подскажите плиз, как реализовать удаление?
307
13 июня 2008 года
Artem_3A
863 / / 11.04.2008
Ну по идее у тебя там не класс, а структура... Так как принцип инкапсуляции отсуствует в корне! Вообще все данные в классе должны быть закрытыми, а функции члены открытыми...

На счет удаления, пролистываешь список до 3го элемента, сохрянешь все что после него во временный указатель, обнуляешь удаляешь эти три, потом соединяешь две части списка. Примерно так:

Код:
class Date
{
private:
    .......................
    Date *next;
public:
    .......................
    ~Date(void);
    void eraseT(void);
};

Date::~Date(void)
{
    if(next!=NULL)
        delete next;
}

void Date::eraseT(void)
{
    Date* temp = NULL;
    temp = next;
    int i = 0;
    for(i=0; i<2;i++)
    {
        if(temp->next!=NULL)
        {
            temp = temp->next;
        }
        else
        {
            temp = NULL;
                                  delete next;
                                  next = NULL;
            return;
        }
    }
    Date *prev = temp;
    temp = temp->next;
    prev->next = NULL;
    delete next;
    next = temp;
    temp = NULL;
    prev = NULL;
           return;
}
..................................................................................


не тестировал и не отлаживал, так что все на вскидку, сам протестируешь и отладишь.
320
14 июня 2008 года
m_Valery
1.0K / / 08.01.2007
Цитата:
Разработайте класс, реализующий линейный односвязный список. Методы класса: вставка элемента после n-го элемента списка, просмотр списка, удаление 3-х элементов списка, начиная с n-го. Поля записей: номер учебной группы, предмет изучения, количество часов, тип проводимых занятий


Для того чтобы схожие темы не повторялись ежегодно,поскольку все студенты пишут из года в год списки,строки,вектора,очереди и т.д и т.п. на форуме есть FAQ,там есть ссылки на темы с кодом односвязных и двусвязных списков,и плюс еще куча всяких студенческих ежегодных задач.Пользуйся.И читай прикрепленную тему о том как пользоваться поиском по форуму.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог