Написал прогу, но почему-то не работает добавление элемента в конец.(Линейные Списки) Помогите пожалуйста исправить её. Код | /* callmenu.cpp Файл из проекта: LinearList Главный файл проекта: main.cpp */
#include "main.h"
void callmenu(ELEMENT *start) { int in=NULL; for( ; ; ) { //Очистка буфера _flushall(); //вывод пунктов меню на консоль printf("\nLinear list - Unidirectional\nData type - integer\n\n1.Add to End\n2.Delete from Beginning\n3.Delete All\n4.Print All\n5.Insert between Two Others\n6.Exit\n\nSelect your option: ");
in=_getche(); //Очистка экрана system("cls");
switch(in) { case 49:printf("\nAdding...\n"); Print(start); Add_End(start); Print(start); //при нажатии 1 вызывает функцию добавления в начало списка break; case 50:printf("\nDeleting...\n"); Print(start); Del_Beg(start); Print(start); //при нажатии 2 вызывает функцию удаления из начала списка break; case 51:printf("\nDeleting all...\n"); Print(start); Del_All(start); Print(start); //при нажатии 3 удаляет все элементы списка break; case 52:printf("\nPrinting...\n"); Print(start); //при нажатии 4 выводит содержимое списка на экран break; case 53:printf("\nInserting...\n"); Print(start); Insert(start); Print(start); //при нажатии 5 вызывает функцию вставки элемента между 2 другими на заданную позицию break; case 54:printf("\nBail\n"); exit(1); //при нажатии 6 выходит из программы }
//функция вывода ошибки при нажатии на любую жругую клавишу if(in>54 || in<49) { printf("Bail anyway\n"); }
} }
|
Код | /* del_beg.cpp Файл из проекта: Linear List Главный файл проекта: main.cpp */
#include "main.h"
//Функция удаления первого элемента списка void Del_Beg(ELEMENT* &start) { ELEMENT *del; //создание указателя на удаляемый элемент //проверка на то, есть ли что-то для удаления if(start==NULL) { printf("\nNothing to delete\n"); return; } //если элемент в списке 1, его удаление и указание "start" в пустоту для описания пустого списка if(start->next==NULL) { delete start; start=NULL; return; }
//если элементов в списке несколько, перенос указателя на начало к следующему элементу и удаление 1-го if(start->next!=NULL) { del=start; start=del->next; delete del; return; }
}
//Функция удаления всего списка через зацикливание удаления 1-го элемента void Del_All(ELEMENT* &start) { while(start!=NULL) { Del_Beg(start); } return; }
|
Код | /* main.cpp Проект: Linear List Разработчик: Группа: Файлы ресурсов: callmenu.cpp Заголовочные файлы: main.h */
#include "main.h"
//главная функция проекта void main() { ELEMENT *start=NULL; //отсутствие первого элемента callmenu(start); //вызов функции меню }
|
Код | /* print.cpp Файл из проекта: Linear List Главный файл проекта: main.cpp */
#include "main.h"
//Функция печати содержимого списка void Print(ELEMENT* start) { ELEMENT *print; //создание указателя на печатаемый элемент //вывод сообщения о пустом списке, если start указывает в пустоту if(start==NULL) { printf("\nList is empty\n"); return; }
print=start; //указатель печати прикреплен к началу списка printf("\n");
//последовательная печать полей "data" всех элементов списка while(print!=NULL) { printf("%d ", print->data);
print=print->next; } printf("\n\n"); //вывод 1 пустой строки после печати содержимого списка }
|
Код | /* add_end.cpp Файл из проекта: Linear List Главный файл проекта: main.cpp */
#include "main.h"
//Функция добавления нового элемента в начало списка void Add_End(ELEMENT* &start) { ELEMENT *temp, *cur; //указатель на временный элемент
temp = new ELEMENT; //создание временного элемента и задание указателя
//проверка на правильность создания элемента if(temp==NULL) { printf("Element construction error\n"); return; } //ввод информации в поле "data" элемента int data; printf("Input your data: "); //ввод данных с проверкой, при неправильном вводе - удаление элемента для избежания memory leak if(scanf("%d", &data)!=1) { printf("Error reading data\n"); delete temp; return; } temp->data=data;//запись данных в элемент temp->next=NULL;
//описание элемента как 1-го в списке, если до этого он был пуст if(start==NULL) { start=temp; start->next=NULL; return; }
else{ cur=start; while( cur->next != NULL) cur=cur->next; cur->next=temp; return;}
|
Код | /* main.h Заголовочный файл проекта: Linear List Главная функция находится в: main.cpp */
#ifndef MAIN_H #define MAIN_H
#include <stdio.h> #include <stdlib.h> #include <conio.h>
//Описание полей, которые будет содержать элемент struct ELEMENT { int data; ELEMENT* next; };
//Прототипы функций void callmenu(ELEMENT* start); void Add_End(ELEMENT* &start); void Del_Beg(ELEMENT* &start); void Del_All(ELEMENT* &start); void Print(ELEMENT* start); void Insert(ELEMENT* &start);
#endif
|
Добавлено @ 15:39 хех левая буква зю была) теперь всё супер. Добавлено @ 15:46 1.Принимаю любую критику. 2.Вопрос что нужно исправть чтобы получился кольцевой список? Это сообщение отредактировал(а) KyKy - 2.4.2006, 15:43
|