Перейти к содержанию
СофтФорум - всё о компьютерах и не только

двусвязный список


Рекомендуемые сообщения

разработать программу для создания и работы с двусвязным списком, состоящим из структур. для работы со списком создать меню со следующими пунктами:

1. Создание списка.

2. Просмотр списка.

3. Добавление в конец списка новой структуры.

4. Корректировка списка.

5. Выход.

Структура содержит название книги, автора, год издания. п4.- Удалить издания с годом меньше заданного.

//============================/////////============================

#include <stdio.h>

#include <conio.h>

#include <malloc.h>

#include <io.h>

//=============================//////===============================

struct Book

{

char nazv[10];

char avtor[20];

int godizd;

Book* next;

Book* prev;

};

struct list

{

Book* first;

Book* last;

};

void menu();

void addBook(list&);

void delBook(list&);

void printlist(list*);

void createlist(list*&);

list* thelist=0;

int main()

{

Book* first=0;

Book* last=0;

menu();

getche();

return 0;

}

void menu()

{ char quit;

enum{false,true};

quit = false;

while(true)

{

int choice;

printf("\n -----MENU-----\n");

printf("(1) vvedite spisok \n");

printf("(2) prosmotr \n");

printf("(3) dobavlenie \n");

printf("(4) ydalenie \n");

printf("(5) exit \n");

scanf("%d", &choice);

switch (choice)

{

case(1): if (!thelist)

{

createlist(thelist );

printf(" the list has been created succesfully... \n");

}

else

printf(" the list is already created...\n" );

break;

case(2):

if (thelist)

printlist(thelist);

else

printf(" the list is not created...\n");

break;

case(3):

if (thelist)

addBook(*thelist);

else

printf(" the list is not created...\n");

break;

case 4:

if (thelist)

delBook(*thelist);

else

printf(" the list is not created... \n");

break;

case(5):

quit = true;

}

if (quit == true)

break;

}

}

//==============================/////////===================================

void addBook(list& thelist)

{

printf("\n *** dobavit' novuy knigy *** \n");

printf(" vvedite nazvanie: ");

Book* newBook = new Book;

scanf("%s",&newBook->nazv);

printf(" vvedite avtora: ");

scanf("%s",&newBook->avtor);

printf(" vvedite god izdania: ");

scanf("%d",&newBook->godizd);

if (thelist.last)

{

thelist.last->next = newBook;

newBook->prev = thelist.last;

}

else

{

thelist.first = newBook;

newBook->prev = 0;

}

thelist.last = newBook;

newBook->next = 0;

printf("*** book was added successfully *** \n");

}

//=======================================///////////////==========================

void createlist (list*& thelist)

{

thelist = new list;

thelist->first = NULL;

thelist->last = NULL;

Book *p,*k=NULL;

do

{

p = new Book;

printf( "*** vvedite knigy *** \n");

printf(" vvedite nazv: ");

scanf("%s", &p->nazv);

printf( " vvedite avtora: " );

scanf("%s", &p->avtor);

printf(" vvedite god izdania: ");

scanf( "%d",&p->godizd);

if(thelist->first==NULL) thelist->first = p;

p->next = NULL;

if(k)

{

p->prev = k;

k->next = p;

}

else

{

p->prev = NULL;

}

k = p;

puts(" Zakonchit' - <esc>");

}

while (getch()!=27);

thelist->last=p;

}

//=======================================================///////////============================

void printlist(list* thelist)

{

printf("\n *** prosmotr knig *** \n");

Book* curBook = thelist->first;

while (curBook)

{

// printf("%s\n",curBook->nazv);

// printf("%s\n",&curBook->avtor);

// printf("%d\n",&curBook->godizd);

// curBook = curBook->next;

printf("\n %s %s %d ",curBook->nazv,curBook->avtor,curBook->godizd);

curBook = curBook->next;

}

printf("\n *** end *** \n" );

}

//=================//======================//=======================//

void delBook(list& thelist)

{

Book* curBook = thelist.first;

int Pos;

printf( " Enter the godizdania for deleted Book: \n");

scanf("%d",&Pos);

printf("%d",Pos);

for (int i=0; i<Pos ; i++)

{

if (curBook)

curBook = curBook->next;

}

if (curBook && (Pos >= 0))

{

if (curBook->prev)

{

curBook->prev->next = curBook->next;

}

else

{

thelist.first = curBook->next;

}

if (curBook->next)

{

curBook->next->prev = curBook->prev;

}

else

{

thelist.last = curBook->prev;

}

delete curBook;

printf("Book ? ", Pos ," has been deleted successfully..." );

}

else

printf("Book ? ", Pos , " not found..." );

}

помогите подправить и исправить ошибки, пункт удаление не работает вообще

Ссылка на комментарий
Поделиться на другие сайты

Мне ненравится эта часть. Символьная переменная quit, а значение ей присваивается как булевой

...  char quit;  enum{false, true};  quit = false;...
Ссылка на комментарий
Поделиться на другие сайты

разработать программу для создания и работы с двусвязным списком, состоящим из структур. для работы со списком создать меню со следующими пунктами:

1. Создание списка.

2. Просмотр списка.

3. Добавление в конец списка новой структуры.

4. Корректировка списка.

5. Выход.

Структура содержит название книги, автора, год издания. п4.- Удалить издания с годом меньше заданного.

[/code]//============================/////////============================

#include <stdio.h>

#include <conio.h>

#include <malloc.h>

#include <io.h>

//=============================//////===============================

struct Book

{

char nazv[10];

char avtor[20];

int godizd;

Book* next;

Book* prev;

};

struct list

{

Book* first;

Book* last;

};

void menu();

void addBook(list&);

void delBook(list&);

void printlist(list*);

void createlist(list*&);

list* thelist=0;

int main()

{

Book* first=0;

Book* last=0;

menu();

getche();

return 0;

}

void menu()

{ char quit;

enum{false,true};

quit = false;

while(true)

{

int choice;

printf("\n -----MENU-----\n");

printf("(1) vvedite spisok \n");

printf("(2) prosmotr \n");

printf("(3) dobavlenie \n");

printf("(4) ydalenie \n");

printf("(5) exit \n");

scanf("%d", &choice);

switch (choice)

{

case(1): if (!thelist)

{

createlist(thelist );

printf(" the list has been created succesfully... \n");

}

else

printf(" the list is already created...\n" );

break;

case(2):

if (thelist)

printlist(thelist);

else

printf(" the list is not created...\n");

break;

case(3):

if (thelist)

addBook(*thelist);

else

printf(" the list is not created...\n");

break;

case 4:

if (thelist)

delBook(*thelist);

else

printf(" the list is not created... \n");

break;

case(5):

quit = true;

}

if (quit == true)

break;

}

}

//==============================/////////===================================

void addBook(list& thelist)

{

printf("\n *** dobavit' novuy knigy *** \n");

printf(" vvedite nazvanie: ");

Book* newBook = new Book;

scanf("%s",&newBook->nazv);

printf(" vvedite avtora: ");

scanf("%s",&newBook->avtor);

printf(" vvedite god izdania: ");

scanf("%d",&newBook->godizd);

if (thelist.last)

{

thelist.last->next = newBook;

newBook->prev = thelist.last;

}

else

{

thelist.first = newBook;

newBook->prev = 0;

}

thelist.last = newBook;

newBook->next = 0;

printf("*** book was added successfully *** \n");

}

//=======================================///////////////==========================

void createlist (list*& thelist)

{

thelist = new list;

thelist->first = NULL;

thelist->last = NULL;

Book *p,*k=NULL;

do

{

p = new Book;

printf( "*** vvedite knigy *** \n");

printf(" vvedite nazv: ");

scanf("%s", &p->nazv);

printf( " vvedite avtora: " );

scanf("%s", &p->avtor);

printf(" vvedite god izdania: ");

scanf( "%d",&p->godizd);

if(thelist->first==NULL) thelist->first = p;

p->next = NULL;

if(k)

{

p->prev = k;

k->next = p;

}

else

{

p->prev = NULL;

}

k = p;

puts(" Zakonchit' - <esc>");

}

while (getch()!=27);

thelist->last=p;

}

//=======================================================///////////============================

void printlist(list* thelist)

{

printf("\n *** prosmotr knig *** \n");

Book* curBook = thelist->first;

while (curBook)

{

// printf("%s\n",curBook->nazv);

// printf("%s\n",&curBook->avtor);

// printf("%d\n",&curBook->godizd);

// curBook = curBook->next;

printf("\n %s %s %d ",curBook->nazv,curBook->avtor,curBook->godizd);

curBook = curBook->next;

}

printf("\n *** end *** \n" );

}

//=================//======================//=======================//

void delBook(list& thelist)

{

Book* curBook = thelist.first;

int Pos;

printf( " Enter the godizdania for deleted Book: \n");

scanf("%d",&Pos);

printf("%d",Pos);

for (int i=0; i<Pos ; i++)

{

if (curBook)

curBook = curBook->next;

}

if (curBook && (Pos >= 0))

{

if (curBook->prev)

{

curBook->prev->next = curBook->next;

}

else

{

thelist.first = curBook->next;

}

if (curBook->next)

{

curBook->next->prev = curBook->prev;

}

else

{

thelist.last = curBook->prev;

}

delete curBook;

printf("Book ? ", Pos ," has been deleted successfully..." );

}

else

printf("Book ? ", Pos , " not found..." );

}

[/

помогите подправить и исправить ошибки, пункт удаление не работает вообще

[/quote

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...