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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2014, 22:16   #1
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию Односвязный список.Вывод и сортировка по алфавиту

У меня есть односвязный список.Раньше был двухсвязный но дали задание сделать на односвязный
Работает,добавляет и удаляет.

Единственное с выводом информации и проблема сортировки.Введу я 3 значение а у меня только одно при выводе списка высвечивается(Смотрите картинку)

Хочется чтобы выводил все цвета и по алфавиту(код сортировки есть в программе),с выводом проблема просто.


Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
 
using namespace std;
 
struct LnSp
{
    string name;
    int x;
    LnSp *Next;
    LnSp *prev;
};
 
LnSp *PHead;
void dobavz4(string name, int x, LnSp **Head)
{
    LnSp *p,*p1;
    p=new LnSp;
    p->name=name;///переменная имя
    p->x=x;///переменная код
    p->Next=NULL;
    p->prev=NULL;
    if ((*Head==NULL))///если список пуст
    {
        *Head=p;
    }
    else if (p->name > (*Head)->name)///если список не пуст
        {
            p->Next=(*Head);
            (*Head)->prev=p;///с предыдущего элемента указатель переносим на добавленный
            (*Head)=p;//делаем его последним
        }
    else if (p->name < (*Head)->name)
        {
            p->Next=p;
            p->prev=(*Head);
            (*Head)=p;
        }
    else
    {
        p1=(*Head);
        while (p1!=NULL)
        {
            if ((p1->name > p->name)&&(p1->Next->name < p->name))//упорядочивание по 1-ой букве
            {
                p->Next=p1->Next;
                p->prev=p1;
                p1->Next->prev=p;
                p1->Next=p;
                break;
            }
            p1=p1->Next;
        }
    }
}
void dobz4()
{
    string name;
    int k=0;
    cout<<"добавьте цвета в список "<<endl;
        cout<<"имя: ";
        cin>>name;
        cout<<"код: ";
        cin>>k;
        dobavz4(name,k,&PHead);///Вызов функции добавления
    cout<<"добавлено! "<<endl;
}
 
void Printz4(LnSp *Head)
{
    LnSp *p;
    p=Head;
    if (p==NULL)///проверка на пустоту
    {
        cout<<"список пуст! "<<endl;
    }
    else
        while (p!=NULL)//пока список не пуст
        {
            {
                cout<<p->name<<": ";///вывод имени
                cout<<p->x<<endl; //вывод кода
                p=p->prev;
            }
        }
}
void ALLz4()
{
    Printz4(PHead);///Вызов функции вывода
}
 
void dellz4(LnSp **Head)//Удаление элемента списка
{
    LnSp *p,*p1;
    p=(*Head);
    string str;
    cout<<"Введите название удаляемого цвета: "<<endl;
    cin>>str;
    cout<<endl;
    bool b=false;
    while (p!=NULL)
        {
            if (p->name==str)///если цвет найден
            {
                b=true;
                if ((p==(*Head)))///если элемент один в списке
                {
                    delete(*Head);
                    *Head=NULL;
                    cout<<"удалено! "<<endl;
                    break;
                }
                else if (p==(*Head))//Если найденный элемент 1-ый в списке
                {
                    (*Head)=p->prev;
                    (*Head)->Next=NULL;
                    delete (p);
                    cout<<"удалено! "<<endl;
                    break;
                }
                        
            }
            
            p=p->prev;
        }
    if (!b)///если цвет введён не верно
            {
                cout<<"неверно введен цвет! "<<endl;
            }
}
 
void delz4()
{
    dellz4(&PHead);
}
 
void delAll4(LnSp **Head)///удаление всего списка
{
    LnSp *p;
    p=(*Head);
    while (p!=NULL)///пока список не пуст
    {
       delete(*Head);//удаляем 1-ый
                    delete(*Head);///удаляем последний
                    *Head=NULL;
                    cout<<"Удалено!"<<endl;
                    break;
    }
}
 
void delAl4()
{
    delAll4(&PHead);///вызов функции удаления всего списка
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    typedef void(*pmen)();
    pmen mas[5];
    cout<<"Меню: "<<endl;
    cout<<"1.Добавление"<<endl;
    cout<<"2.Печать"<<endl;
    cout<<"3.Удаление"<<endl;
    cout<<"4.Удаление всего списка"<<endl;
    mas[0]=dobz4;
    mas[1]=ALLz4;
    mas[2]=delz4;
    mas[3]=delAl4;
    int m=0;
    while (m<5) 
    {
        cout<<endl<<endl<<"Выберите пункт меню:";
        cin>>m;
        if (m<5) {mas[m-1]();};
    }
    system("pause");
    return 0;
}
Изображения
Тип файла: jpg На форум656565.jpg (53.5 Кб, 121 просмотров)
Otar4ik вне форума Ответить с цитированием
Старый 08.10.2014, 13:41   #2
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Исправил,оказывается был двусвязный...Но результат такой же((((

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
 
using namespace std;
 
struct LnSp
{
    string name;
    int x;
    LnSp *Next;
};
 
LnSp *PHead;
void dobavz4(string name, int x, LnSp **Head)
{
    LnSp *p,*p1;
    p=new LnSp;
    p->name=name;///переменная имя
    p->x=x;///переменная код
    p->Next=NULL;
    if ((*Head==NULL))///если список пуст
    {
        *Head=p;
    }
    else if (p->name < (*Head)->name)
        {
            p->Next=p;
            p->Next=(*Head);
            (*Head)=p;
        }
    else
    {
    p1=(*Head);
        while (p1!=NULL)
        {
            if ((p1->name > p->name)&&(p1->Next->name < p->name))//упорядочивание по 1-ой букве
            {
                p->Next=p1->Next;
                p->Next=p1;
                p1->Next->Next=p;
                p1->Next=p;
                //break;
            }
            p1=p1->Next;
        }
    }
}
void dobz4()
{
    string name;
    int k=0;
    cout<<"добавьте цвета в список "<<endl;
        cout<<"имя: ";
        cin>>name;
        cout<<"код: ";
        cin>>k;
        dobavz4(name,k,&PHead);///Вызов функции добавления
    cout<<"добавлено! "<<endl;
}
 
void Printz4(LnSp *Head)
{
    LnSp *p = Head;;
    if (p==NULL)///проверка на пустоту
    {
        cout<<"список пуст! "<<endl;
    }
    else
        while (p!=NULL)//пока список не пуст
        {
            {
                cout<<p->name<<": ";///вывод имени
                cout<<p->x<<endl; //вывод кода
                p=p->Next;
            }
        }
}
void ALLz4()
{
    Printz4(PHead);///Вызов функции вывода
}
 
void dellz4(LnSp **Head)//Удаление элемента списка
{
    LnSp *p,*p1;
    p=(*Head);
    string str;
    cout<<"Введите название удаляемого цвета: "<<endl;
    cin>>str;
    cout<<endl;
    bool b=false;
    while (p!=NULL)
        {
            if (p->name==str)///если цвет найден
            {
                b=true;
                if ((p==(*Head)))///если элемент один в списке
                {
                    delete(*Head);
                    *Head=NULL;
                    cout<<"удалено! "<<endl;
                    break;
                }
                else if (p==(*Head))//Если найденный элемент 1-ый в списке
                {
                    (*Head)=p->Next;
                    (*Head)->Next=NULL;
                    delete (p);
                    cout<<"удалено! "<<endl;
                    break;
                }
 
            }
 
            p=p->Next;
        }
    if (!b)///если цвет введён не верно
            {
                cout<<"неверно введен цвет! "<<endl;
            }
}
 
void delz4()
{
    dellz4(&PHead);
}
 
void delAll4(LnSp **Head)///удаление всего списка
{
    LnSp *p;
    p=(*Head);
    while (p!=NULL)///пока список не пуст
    {
       delete(*Head);//удаляем 1-ый
                    delete(*Head);///удаляем последний
                    *Head=NULL;
                    cout<<"Удалено!"<<endl;
                    break;
    }
}
 
void delAl4()
{
    delAll4(&PHead);///вызов функции удаления всего списка
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    typedef void(*pmen)();
    pmen mas[5];
    cout<<"Меню: "<<endl;
    cout<<"1.Добавление"<<endl;
    cout<<"2.Печать"<<endl;
    cout<<"3.Удаление"<<endl;
    cout<<"4.Удаление всего списка"<<endl;
    mas[0]=dobz4;
    mas[1]=ALLz4;
    mas[2]=delz4;
    mas[3]=delAl4;
    int m=0;
    while (m<5)
    {
        cout<<endl<<endl<<"Выберите пункт меню:";
        cin>>m;
        if (m<5) {mas[m-1]();};
    }
    system("pause");
    return 0;
}
Otar4ik вне форума Ответить с цитированием
Старый 08.10.2014, 19:06   #3
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Уже не надо
Otar4ik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать односвязный список элементов с атмосферным давлением выше 760 мм рт.ст., сортировка по полю температура воздуха ( на C ) bilochka Помощь студентам 0 11.05.2013 16:53
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52