Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 00:29   #1
R'nhbyV
Пользователь
 
Регистрация: 25.01.2013
Сообщений: 17
Лампочка (C++)Создание класса со следующими функциями:.."

Здраствуйте
у меня есть рещенная задача как односвязный список, мне ее нужно переделать в класс.
Вот задание:
Реализовать следующие функции односвязным списком:
1.Вывод списка.
2.Вставка элемента в заданную позицию списка.
3.Удаление элемента из заданной позиции списка.
4.Удаление всех элементов из списка.
5.Проверка списка на упорядоченность его элементов. Функция должна возвращать одно из трех значений: 0 — если элементы не упорядочены, 1 — если элементы упорядочены по возрастанию, 2 — если элементы упорядочены по убыванию.
6. Объединение двух списков.
Вот его решение:
Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include<clocale>
using namespace std;
struct item
{ int data;
    item *next;
};
//функция добавления элемента x в заданную позицию
void add(item *&top,int pos, int x)
{
    int j=1;
    int i; item *pnew, *p=top;
    pnew=new item; pnew->data=x;
    if (pos<=1||top==NULL) 
    {
        pnew->next=top; top=pnew;
    }
    else
    {
        for(i=1;i<pos-1;i++) 
            if (p->next!=NULL) 
            {    
                p=p->next;
                j++;
            }
        if (pos<=j+1)
        {
            pnew->next=p->next; p->next=pnew;
        }
    }
}
// функция для вывода списка
void print(item *top)
{
    item *p=top;
    while (p!=NULL) 
    {
        cout<<p->data<<' '; 
        p=p->next;
    }
    cout<<endl;
}
//удалить все
void clrscr(item *&top)
{
    while(top!=NULL)
    { 
        if(top==NULL) 
        { 
            cout<<"спиок пуст!"<<endl; 
        }
        else 
        {
            item *p=top;
            top=top->next; 
            delete p; 
       }
    }
}
//удаление элемента с позиции 
void delet(item *&top, int pos2)
    {
        item *a=top,*b;
        int i=0;
        while(a!=NULL)
        {
            a=a->next;
            i++;
        }
        if(pos2>i||pos2<1) 
        {
            cout<<"такой позиции в списке нет!"<<endl;
        }//проверка на сущ-е позиции      
        else
        {
            if(pos2==1)
            {
                a=top->next;//если эл-т первый
                top=a;
            }
            if (pos2>1)
            {
                i=1;//если эл-т не первый
                a=top;
                while (i!=pos2-1) 
                {
                    i++; a=a->next;
                }
                b=a->next;
                a->next=b->next;//сдвигаем
                delete b;
            }
        }
}
//порядок
int poryadok(item *top)
               { item *q1,*q2;
int l;
q1=top;//указатель на вершину списка
int i=0;int pos=0;
int j=0;
while (q1!=NULL){
    q2=q1->next;
    l=q1-q2;
    q1=q1->next;
    pos++;
        if(l>0){i++;}
        else {j++;}
}if(i==pos){cout<<"упорядочено по убыванию\n";}
else {if(j==pos){cout<<"упорядочено по возрастанию\n";}
else{cout<<"не упорядочено\n";}}
return 0;}
//объединение
void obedinenie(item *top){
    cout<<"список 1: ";
     print(top);int b;int a;int r;int c;int i;int f;
     item *p;
     cout<<"введите количество элементов: ";
        cin>>b;
        if (b!=0)
            for (int f=1; f<=b; f++) // формирование списка
            {
                a=rand()%100;
                add(top,f,a); // вставка элемента 
            }
            cout<<"список 2: ";
        print(top); // вывод списка на экран
        int k=4;int g=k+b;
        if(g!=0)
            for (int h=1;h<=g;h++)
            {if(!(h%2)){ cout<<p->data<<' '; 
        p=p->next;}
            else{ cout<<p->data<<' '; 
        p=p->next;}}
}
int main() {
    setlocale(LC_ALL,"Russian");
     int pos, pos1, pos2, otv, da;
     item *first, *last;
     int x,r,k,m,y,j;
    item *top=NULL;
        cout<<"введите количество элементов: ";
        cin>>k;
        if (k!=0)
            for (int i=1; i<=k; i++) // формирование списка
            {
                r=rand()%100;
                add(top,i,r); // вставка элемента 
            }
        print(top); // вывод списка
        cout<<"Введите номер позиции для вставки: ";
        cin>>pos;
        cout<<"Введиде значение элемента: ";
        cin>>x;
        add(top,pos,x); // добавление элементов в позицию списка
        print(top);  
        cout<<"Введите номер позиции элемента для удаления: ";
        cin>>pos2;
        delet(top,pos2);
        print(top);
        poryadok(top);
        obedinenie(top);
        cout<<"Удалить все элементы? да-1, нет-2 : ";
        int l;
        cin>>l;
        if (l==1){
            void clrscr(item *&top);
                cout<<"удалены.";
        }
        else {cout<<"не удалены : ";
        print(top);
        }
    cin.get();
    cin.get();
}
Теперь мне нужно реализовать не односвязный список,а класс, выполняющий эти же функции

Последний раз редактировалось R'nhbyV; 22.05.2013 в 00:31. Причина: код прописал вручную
R'nhbyV вне форума Ответить с цитированием
Старый 22.05.2013, 01:04   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Теперь мне нужно реализовать не односвязный список,а класс, выполняющий эти же функции
Гм. Класс - понятие языка программирования (структура, объединение, класс...). Односвязный список - структура данных (массив, односвязный список, хэш-таблица, двоичное дерево...). "Не структуру, а класс", наверное?..

Формально, достаточно заменить слово struct на class и указать уровень доступа public для данных-членов. По существу же...
Методы класса - это функции, которые объявлены внутри класса; при их определении указывается, функция какого класса определяется:
Код:
class MyClass{
//...
public:
  int function(int a, double b); //Объявление
};

int MyClass::function(int a, double b){ //Определение - добавилось имя класса
  /*...*/
}

//...
MyClass obj;
obj.function(42, 3.14); //Вызов
Такая функция (обычно называемая методом класса) принимает, помимо явно указанных аргументов, ещё один, "невидимый" аргумент типа MyClass* - указатель на вызвавший объект (в данном примере он равен &obj). Внутри метода к этому аргументу можно обратиться по имени this. В ряде случаев у Вас в функции уже передаётся, явным образом, указатель на item, так что их легко было бы превратить в методы класса (убрав аргумент, перенеся объявление функции в тело класса и изменив объявление).
Однако в иных случаях всё заметно хуже. Дело в том, что значение this нельзя изменить и оно не может быть NULL. Поэтому, если пытаться сделать из item класс списка, возникает проблема того, как представлять пустой список.
Классическое решение - сделать класс списка отдельно, и в данных у него будет только указатель на item.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Создание класса "Время" molinari Помощь студентам 2 21.02.2012 03:57
Создание класса "Число" и методов Alexar Makken Общие вопросы Delphi 3 05.12.2011 13:26
Как создать программу со следующими функциями... Alien-18 Общие вопросы Delphi 12 30.08.2011 08:41
Создание класса "Трехмерный вектор" steel_may Помощь студентам 1 09.05.2009 12:29
Delphi. Создание нового класса, его "предков". Krechet Помощь студентам 0 26.04.2009 15:52