Форум программистов, компьютерный форум CyberForum.ru

Задача с односвязным и двухсвязным списком (сортировка). - C++

Восстановить пароль Регистрация
 
Hellraiserrr
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 24
01.11.2011, 22:34     Задача с односвязным и двухсвязным списком (сортировка). #1
Условие:
Структура содержит название издания, газета или журнал, цена экземпляра. Добавлять новые издания так, чтобы названия были упорядочены по алфавиту.
Выполнить в двух вариантах, с односвязным и двухсвязным.
Help!

Добавлено через 5 часов 3 минуты
up. Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 22:34     Задача с односвязным и двухсвязным списком (сортировка).
Посмотрите здесь:

Ошибка 0xC0000005 при работе с двухсвязным списком C++
C++ Работа с односвязным списком
C++ Работа с односвязным линейным списком
Ошибки связанные с односвязным списком C++
C++ Полиморфизм в сочетании с односвязным списком
Реализация с односвязным списком C++
C++ Задача с односвязным списком
C++ Работа с односвязным списком

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hellraiserrr
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 24
03.11.2011, 20:14  [ТС]     Задача с односвязным и двухсвязным списком (сортировка). #2
Кто может помочь с добавлением записи в список?

Добавлено через 20 часов 4 минуты
Есть ввод и вывод односвязного списка , осталась добавить запись, отсортировать и перебить под двухсвязный.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include<iostream>
struct ListBook
{char izd[20];                                                      //Издание
 char vid[20];                                                 //журнал или газета
 char cena[5];                                                      //цена
 struct ListBook *next;                                             //указание на следующую структуру
};
struct ListBook *create(void);                                      //функция создания списка (возвращает адрес его головы)
void list(ListBook *head);                                          // функция просмотра списка
struct ListBook *head;                                              // глобальная переменная, адрес головы списка
int main()
{  setlocale(0,"");
   head=create();
   list(head);
   free(head);}
struct ListBook * create(void)
{  ListBook *p, *pred;
   char c;                                                         // pred – указатель на предыдущую структуру
   head=pred=p=(ListBook *)malloc(sizeof(ListBook));               //выделяем память для первой записи
   printf("Введите название издания "); scanf("%s", p->izd);
        printf("Введите газета или журнал "); scanf("%s", p->vid);
        printf("Введите цену экземпляра "); scanf("%s", p->cena);
   do { p=(ListBook *)malloc(sizeof(ListBook));
        printf("Введите название издания "); scanf("%s", p->izd);
        printf("Введите газета или журнал "); scanf("%s", p->vid);
        printf("Введите цену экземпляра "); scanf("%s", p->cena);
        pred->next=p; //ссылка из предыдущей записи на текущую
        pred=p; // сохранение адреса текущей записи в поле предыдущей
        printf(" Закончить? y/n  ");
        c=getch();
       } while (c!='y');
   p->next=NULL;
   return head;}
void list(ListBook *head)
{  ListBook *p;
   p=head;
   while (p!=NULL) 
   {  printf("\n  Название издания: %s",p->izd);
      printf("\n  Газета или журнал: %s",p->vid);
      printf("\n  Цена экземпляра: %s",p->cena);
      p=p->next; 
   }
   getch();
}
Hellraiserrr
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 24
17.12.2011, 18:14  [ТС]     Задача с односвязным и двухсвязным списком (сортировка). #3
Написал функцию сортировки, но она замещает все записи, т.е. выводится только ново вводимая.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/**/
 
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include<iostream>
struct ListBook
{char izd[50];                                                      //Издание
 char vid[50];                                                 //журнал или газета
 char cena[20];                                                      //цена
 struct ListBook *next;                                             //указание на следующую структуру
};
typedef struct ListBook listnode;
typedef listnode *listnodeptr;
 
void insert(listnodeptr *,char[50],char[50],char[20]);
struct ListBook *create(void);                                      //функция создания списка (возвращает адрес его головы)
void list(ListBook *head);                                          // функция просмотра списка
struct ListBook *head;                                              // глобальная переменная, адрес головы списка
int main()
{  listnodeptr startptr=NULL;
    char item1[50],item2[50],item3[20];
    setlocale(0,"");
   head=create();
   list(head);
   printf("\nВведите дополнительную запись\n");
      printf("Введите название издания "); scanf("%s", item1);
        printf("Введите газета или журнал "); scanf("%s", item2);
        printf("Введите цену экземпляра "); scanf("%s", item3);
        insert(&startptr,item1,item2,item3);
        head=(ListBook *)malloc(sizeof(ListBook));
        list(startptr);
   free(head);
}
struct ListBook * create(void)
{  ListBook *p, *pred;
   char c;                                                         // pred – указатель на предыдущую структуру
   head=pred=p=(ListBook *)malloc(sizeof(ListBook));               //выделяем память для первой записи
   printf("Введите название издания "); scanf("%s", p->izd);
        printf("Введите газета или журнал "); scanf("%s", p->vid);
        printf("Введите цену экземпляра "); scanf("%s", p->cena);
   do { p=(ListBook *)malloc(sizeof(ListBook));
        printf("Введите название издания "); scanf("%s", p->izd);
        printf("Введите газета или журнал "); scanf("%s", p->vid);
        printf("Введите цену экземпляра "); scanf("%s", p->cena);
        pred->next=p; //ссылка из предыдущей записи на текущую
        pred=p; // сохранение адреса текущей записи в поле предыдущей
        printf(" Закончить? y/n  ");
        c=getch();
       } while (c!='y');
   p->next=NULL;
   return head;
}
void list(ListBook *head)
{  ListBook *p;
   p=head;
   while (p!=NULL) 
   {  printf("\n  Название издания: %s",p->izd);
      printf("\n  Газета или журнал: %s",p->vid);
      printf("\n  Цена экземпляра: %s",p->cena);
      p=p->next; 
   }
   getch();
}
 
 
void insert(listnodeptr *sptr, char value1[50], char value2[50], char value3[20])
{
   listnodeptr newptr,previousptr,currentptr;
newptr=(ListBook *)malloc(sizeof(ListBook));
if(newptr!=NULL)
{
    strcpy(newptr->izd,value1);
    strcpy(newptr->vid,value2);
    strcpy(newptr->cena,value3);
    newptr->next=NULL;
    previousptr=NULL;
    currentptr=*sptr;
    while (currentptr!=NULL && value1[0]>currentptr->izd[0])
    {
        previousptr=currentptr;
    currentptr=currentptr->next;
    }
if (previousptr==NULL)
    {
        newptr->next=*sptr;
        *sptr=newptr;
    }
else 
    {
        previousptr->next=newptr;
        newptr->next=currentptr;
    }
 
}
    
}
Yandex
Объявления
17.12.2011, 18:14     Задача с односвязным и двухсвязным списком (сортировка).
Ответ Создать тему
Опции темы

Текущее время: 11:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru