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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
uNsLide
0 / 0 / 0
Регистрация: 15.04.2009
Сообщений: 15
#1

Меню и список - C++

20.06.2009, 12:55. Просмотров 714. Ответов 0
Метки нет (Все метки)

Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе:

У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились: Введите элемент и номер.

вот сам код:
Код
[CPP]
#ifndef __list_h
#define __list_h
#include <iostream>
#include <list>
using namespace std;

template <class Data> class Node 
{	
public:
    Node<Data> *next;
	Node<Data> *prev;
	Data data;  // данные
	Node(Data adddata = 0, Node* addnext = 0, Node* addprev = 0) 
    {
		data = adddata;
		next = addnext;
		prev = addprev;
	}
	
	Node* getNext() 
    { return next; }	
	Node* getPrev() 
    { return prev; }
	void setNext(Node* node) 
    { next = node; }
	void setPrev(Node* node)
    { prev = node; }
	Data getData() 
    { return data; }
	void setData(Data d) 
    { data = d; }
};

template <class Data> class List 
{
	Node<Data> *begin;
	Node<Data> *end;
public:
	List() 
    {
		begin = NULL;
		end = NULL;
	}
  // Функции. Обьявление	
	~List();
	bool empty();
	void print();
    void delHead();
    void delTail();
    int search(Data);
    int remove(int index);
//---------------------------------------------------------------------------------------------------
//Описание функций
int DelALL()  
{
        Node<Data> *tmp;
	if(begin!=0)
	{
                Node<Data> *tmp = begin;
                while(tmp)
                {       
                          tmp = tmp->next;
                          begin = tmp;
                          delete tmp;
                }
                end = NULL;
    }
}
	
	void addToBegin(Data data) 
    {
		Node<Data> *len = new Node<Data>(data,begin,NULL); 
        //Конструктор (данные, следующий элемент списка, предыдущий элемент)
		if(begin) begin->setPrev(len);
		else end = len;
		begin = len;
	}
	
	void addToEnd(Data data) 
    {
		Node<Data> *len = new Node<Data>(data,NULL,end);
		if(end) end->setNext(len);
		else begin = len;
		end = len;
	}
	
	int addCustom(int num, Data data)
     {
		int znach = 0;
		Node<Data> *next = begin, *prev;
		while (znach < num) 
        {
			if (next == NULL) 
            { break; }
			next = next->getNext();
			znach ++;
		}					
		if(next) prev = next->getPrev();
		Node<Data> *len = new Node<Data>(data,next,prev);
		if(prev)prev->setNext(len);
		else begin = len;
		if(next)next->setPrev(len);
        else end = len;		
	}
void printFromEnd() 
    {
		Node<Data> *tmp = end;
		cout << " * * *" << endl;
		cout << "List from the end: " << endl;
		while (tmp) 
        {
			cout << tmp->getData() << endl;
			tmp = tmp->getPrev();
		}
		cout << " * * *" << endl;
		
	}
	
	int swap(int index1, int index2) 
    {
        Node<Data> *tmp = begin;
		int i = 0;
        while (i<index1) 
        {
            if (!tmp) return 0;
            tmp = tmp->getNext();
            i++;
        }
        if(!tmp) return -1;         
        
        Node<Data> *tmp1 = begin;
	    i = 0;
		
        while (i<index2) 
        {
            if (!tmp1) return 0;
            tmp1 = tmp1->getNext();
            i++;
        }
        if(!tmp1) return -1;   
        
        Data d = tmp->getData();
        tmp->setData(tmp1->getData());
        tmp1->setData(d);
        
        return 0;
    }
	
};
template <class Data> bool List<Data>::empty()
{
         system("cls");
         if( begin == 0 && end == 0) cout << "\nYes.List is Empty." << endl;
         else cout << "\nNo.List isn't Empty." << endl;
}

template <class Data> List<Data>::~List()
{
         system("cls");
         DelALL();
}
template <class Data> void List<Data>::print()
{
         	Node<Data>* tmp = begin;
		cout << " * * *" << endl;
		cout << " List: " << endl;
		while (tmp) 
        {
			cout << (*tmp).getData() << endl;
			tmp = (*tmp).getNext();
		}
		cout << " * * *" << endl;
}


template <class Data> void List<Data>::delHead()
{
         Node<Data> *tmpDelete = NULL;
         if (begin == 0)
         { cout << "\nEmpty List" << endl; 
           system("pause");
            exit(0); }
         
         if(begin->next == 0)
         {
         begin = end = NULL;
         delete begin; }
         
         tmpDelete = begin;
         begin = tmpDelete->next;
         begin->prev = NULL;
         delete tmpDelete;
}
template <class Data> void List<Data>::delTail()
{
         Node<Data> *tmpDelete = NULL;
         Node<Data> *tmpEnd = NULL;
         if (end == 0)
         { cout << "\nEmpty List" << endl;
         system("pause");
           exit(0); }
           
         if(end->prev == 0)
         {
                      begin = end = NULL;
                      delete end;
         }
         tmpDelete = end;
         end = tmpDelete->prev;
         end->next = NULL;
         tmpEnd = end;
         delete tmpDelete;
         system("cls");
} 
template <class Data> int List<Data>::search(Data n)
{
	Node<Data> *tmp = begin;
		int index = 0;
		while (tmp) 
        {
			if (tmp->getData() == n)
				return index;
			tmp = tmp->getNext();
			index++; 
		}
		return -1;
}	
template <class Data> int List<Data>::remove(int index)
{
         int count = 0;
         Node<Data> *next = begin, *prev;
    while (count < index) 
    {
          if (next == NULL) 
          {return -1;}
                  next = next->getNext();
                  count ++;
    }
    if (next == NULL) 
    {return -1;}
    prev = next->getPrev();
    Node<Data> *del = next;
         next = next->getNext();
    prev->setNext(next);
         next->setPrev(prev);
    delete del;
    return 0;
}
#endifх
[/CPP]
[CPP]
#include "kyrs.h"

//---------------------------------------- Menu --------------------------------------------
int Menu();
int GetNumber(int,int);

int main() 
{
	List<int>list;
    bool done = false;
    while(!done) 
    {
                switch(Menu()) 
                {
                               case 1: system("cls"); 
       list.addToBegin(1);
       list.addToEnd(8);
	   list.addCustom(1,7);
	   list.addCustom(1,6);
	   list.addCustom(1,5);
	   list.addCustom(1,4);
	   list.addCustom(1,3);
	   list.addCustom(1,2);
                                   
                                    
       break;
       case 2: system("cls");list.print(); break;
       case 3: system("cls");list.printFromEnd(); break;
       case 4: system("cls");
               cout << "\nsearch(3) = " << list.search(3) << endl; break;
               // 3 - 3-й элемент списка
       case 5: system("cls"); 
               cout << "\nswap(3,5) = " << list.swap(3,5) << endl; 
               system("pause");list.print();break;
       case 6: system("pause");list.~List();break;
       case 7: system("cls");
               cout <<"Del elem №5\n"<<list.remove(5) << endl;list.print();system("pause");
               cout <<"Del elem №4\n" <<list.remove(4) << endl;list.print();system("pause");
               system("cls");
               break;
       case 8: system("pause");list.delTail();system("cls");
               list.print();break;
       case 9: system("pause");list.delHead();
               system("cls");list.print();break;
       case 11: cout << "\n\t\t\tThe End." << endl; exit(0);
       case 10: list.empty();break;
               done = true; break;
                    }
                }
                return 0;
    }
    
    int Menu() {
        cout << "\n============================== Main Menu ===================================\n" << endl;
        cout << "\t1 - Make a list \t\t\t 3 - Print from the back \n" << endl;
        cout << "\t2 - Print the List \t\t\t 4 - Search in the list \n" << endl;
        cout << "\t5 - Swap the elements \t\t\t 6 - Clear the List \n" << endl;
        cout << "\t7 - Delete Custom Element \t\t 8 - Delete Tail\n" << endl;
        cout << "\t9 - Delete Head\t\t\t\t 10 - Is List Empty?\n" << endl;
        cout << "\t\t\t\t11 - End of Work\n" << endl;
        return GetNumber(1,11);
    }
    
 int GetNumber(int min, int max)
 {
     int number=min;
     while(true) 
     {
                 cin >> number;
                 if ((number>=min)&&(number <= max)&&(cin.peek()=='\n')) break;
                 else
                 {
                     cout << "Repeat the number please:" << endl;
                     cin.clear();
                     while (cin.get()!='\n') {};
                 }
     }
     return number;
     system("pause");
}
[/CPP]
У меня это описано, но без этого вывода. Необходимо с ним. Я сам там немного запутался, кошда делал.
Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2009, 12:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Меню и список (C++):

Двунаправлений список с меню - C++
Нужно создать меню, которое в себя включает: создание списка, добавление элемента в список, выдаление элемента со списка, поиск элемента...

Меню в классе, реализующем список - C++
Написал прогу, реализующую список с помощью класса. Все работает, жалоб нет. Но преподаватель сказал сделать меню в консоли для управления...

Меню пуск, получить список Win7 - C++
Привет, как можно получить список строк в меню пуск, там где возле кнопки &quot;Выключение&quot; есть такая стрелка вправо и если ее нажать...

Создать список L3 из элементов, входящих и в список L1 и в список L2 - C++
создать список л3 из элементов входящих и в список л1 и в список л2

Разработать программу, в которой будет организовано меню, выбор функций меню - C++
Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся...

Возврат назад в главное меню из подпункта меню - C++
Добрый вечер, подскажите пожалуйста, как организовать многоуровневое меню? А конкретно, надо из подменю вернуться в предыдущее меню. Я...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2009, 12:55
Привет! Вот еще темы с ответами:

3 класса: список, стек(как список), очередь(как список) - C++
препод дал задание: написать 3 класса (список, стек, очередь), методы: вывод, добавление, удаление. Использовать при обращении указатель...

Разработка меню, управление курсором в меню - C++
Задание: Написать программу для опроса нажатых клавиш, определения вида нажатой клавиши и передачи управления на соответствующую метку. При...

Реализация меню. Массив элементов меню - C++
Приветствую. Решил хранить элементы меню в массиве. Вот только элементы - это разные структуры. То есть, CheckBox, InputBox, Submenu - все...

Сформировать список из 10 книг, используя динамическую структуру данных односвязный список - C++
друзья спасайте Сформировать список из 10 книг, используя динамическую структуру данных односвязный список С++


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru