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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 01:38   #1
Кнопка
 
Регистрация: 13.12.2009
Сообщений: 5
По умолчанию односвязное кольцо...

Помогите плиз с задачей...))) Разработать программу работы с односвязным кольцом. Программа должна содержать следующие процедуры, вызываемые из меню:
- построение пустого кольца;
- добавление нового элемента;
- удаление указанного элемента;
- просмотр кольца, начиная с указанного элемента.

надо написать на с
Кнопка вне форума Ответить с цитированием
Старый 13.12.2009, 01:40   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

что не получается?
counter вне форума Ответить с цитированием
Старый 13.12.2009, 01:47   #3
Кнопка
 
Регистрация: 13.12.2009
Сообщений: 5
По умолчанию

да вообще ничего не могу написать... эт уже 3 прога каторую надо написать до завтра, помоги плиз...
Кнопка вне форума Ответить с цитированием
Старый 13.12.2009, 01:54   #4
Кнопка
 
Регистрация: 13.12.2009
Сообщений: 5
Печаль

Код:
#include <conio.h> 
#include <string.h> 
#include <iostream.h> 
#include"vip\menu.cpp" 
void ListForInt(); 
void ListForFloat(); 
void ListForDouble(); 
char bufRus[256]; 
char*Rus(const char*text){ 
 CharToOem(text,bufRus); 
 return bufRus; 
} 
//шаблон класса для работы с односвязным списком 
template<class mytype>class List { 
//внутренний класс, для представления элементов списка 
  class Node{ 
        public: 
          mytype d; 
          Node* next; 
          Node(mytype dat=0){d=dat; next=0;} 
       }; 
  Node* pbeg; //указатель на начало списка 
  public: 
  List(){pbeg=0;} //конструктор 
  ~List(); //деструктор 
  Node * Add(mytype d); //добавление в конец списка 
  Node * Find(mytype key); //поиск по ключу 
  Node * Insert(mytype key,mytype d); //вставка узла d после узла с  28
                                                               // ключом key 
  bool Remove(mytype key); //удаление узла 
  void Print(); //печать списка 
 }; 
//*********************~List() ************************* 
//ДЕСТРУКТОР. Освобождает память для всех узлов списка 
template<class mytype> List<mytype>::~List(){ 
 if(pbeg!=0){ 
    Node* pv=pbeg; 
    while(pv){ 
          pv=pv->next; 
          delete pbeg; 
          pbeg=pv; 
         } 
   } 
} 
//*************************** void Add(mytype d) ********** 
//Добавляет узел в конец списка и возвращает указатель 
// на вставленный узел. 
template<class mytype> List<mytype>::Node* 
List<mytype>::Add(mytype d){ 
 Node* pv=new Node(d); //Создание нового узла 
 if(pbeg==0)pbeg=pv; //первый узел списка 
 else { 
       Node* rab=pbeg; 
       while(rab!=0){ 
            if((rab->next)==0){rab->next=pv;return pv;} 
            rab=rab->next; 
           } 
      } 
} 
//*************************** Node* Find(mytype key) 
//Выполняет поиск узла с заданным ключом и возвращает указатель 
// на него в случае успешного поиска и 0 в случае отсутствия узла в списке 
template<class mytype> List<mytype>::Node* 
List<mytype>::Find(mytype key){ 
 Node* pv=pbeg; 
 while(pv){ 
      if((pv->d)==key)break; 
      pv=pv->next; 
     } 
 return pv; 
} 
//************* Node* Insert(mytype key,mytype d) 
//Вставляет в список узел после узла с ключом key и возвращает 
// указатель на вставленный узел. Если такого узла в списке нет, 
// вставка не выполняется и возвращается значение 0
template<class mytype> List<mytype>::Node* 
List<mytype>::Insert(mytype key,mytype d){ 
 if(Node* pkey=Find(key)) //поиск узла с ключом key 
   { 
    Node* pv=new Node(d); 
//выделение памяти под новый узел и его инициализация 
    pv->next=pkey->next; 
//установление связи нового узла с последующим 
    pkey->next=pv; //установление связи предыдущего узла с новым 
    return pv; 
   } 
 return 0;

Последний раз редактировалось Sazary; 13.12.2009 в 04:38.
Кнопка вне форума Ответить с цитированием
Старый 13.12.2009, 01:55   #5
Кнопка
 
Регистрация: 13.12.2009
Сообщений: 5
Печаль

Код:
} 
//******************* bool Remove(mytype key) 
//Удаляет узел с заданным ключом из списка и возвращает значение true при 
//успешном удалении и false, если узел с таким ключом не найден 
template<class mytype> bool List<mytype>::Remove(mytype key){ 
 if(Node* pkey=Find(key)){ 
    if(pkey==pbeg)pbeg=pbeg->next; //удаление из начала списка 
    else{                                  //Находим указатель на узел, 
         Node*rab=pbeg;          //стоящий в списке перед 
         while(rab)                    //удаляемым узлом. 
             {                              //rab-этот указатель. 
              if((rab->next)==pkey)break; 
              rab=rab->next; 
             } 
         rab->next=pkey->next; 
        } 
    delete pkey; 
    return true; 
   } 
 return false; 
} 
//******************** void Print() -Печать списка 
template<class mytype> void List<mytype>::Print(){ 
 Node*pv=pbeg; 
 cout<<Rus("Наш список:");cout<<endl; 
 while(pv){ 
      cout<<pv->d<<' '; 
      pv=pv->next; 
     } 
 cout<<endl;} 
//--------------------------- MAIN --------------------------------------------- 
int main(int argc, char* argv[]){ 
 int k=0,max,kol; 
 char menu[][100]= {{"   ListForInt "},  {"   ListForFloat "}, 
                      {"   ListForDouble "}, {"   EXIT "},   };
kol=4;  //КОЛИЧЕСТВО СТРОК МЕНЮ. Это используется в выравнивании 
             //строк меню по центру. 
//----ВЫРАВНИВАНИЕ СТРОК МЕНЮ ПО ЦЕНТРУ------------------ 
max=viravnivaniestrok(menu,kol); 
//----------------- МЕНЮ НА ЭКРАНЕ--------------------------------------- 
 textmode(C80); 
while(1){ 
    switch(mmm(kol,menu,max,k)) 
            {    case 0: { 
                          ListForInt(); 
                          k=0;break; 
                         } 
                 case 1: { 
                          ListForFloat(); 
                          k=1;break; 
                         } 
                 case 2: { 
                          ListForDouble(); 
                          k=2;break; 
                         } 
                 case 3:{ 
                          exit(0); 
                         } 
                  } 
            } 
        return 0; 
} 
//*************************** void ListForInt() 
//Эта функция вызывается из главного меню. 
void ListForInt(){ 
 List<int>l1; 
 int k=0,max,kol; 
 char menu[][100]= 
                     { {"   PrintList "}, {"   Add "}, {"   Find "}, {"   Insert   "}, 
                      {"   Remove   "}, {"   EXIT "},  {"   Back "}  }; 
 kol=7;  //КОЛИЧЕСТВО СТРОК МЕНЮ. 
max=viravnivaniestrok(menu,kol); 
//------------------------ МЕНЮ НА ЭКРАНЕ----------------------------- 
 textmode(C80); 
 while(1){ 
    switch(mmm(kol,menu,max,k)) 
            {    case 0: { 
                          l1.Print(); 
                          while(!kbhit()) 
                          k=0;break;} 
                 case 1: { 
                          cout<<Rus("введите число, которое надо вставить:");
           int t;cin>>t; 
                          if( (l1.Add(t)) )cout<<Rus("вставка осуществлена"); 
                          else cout<<Rus("вставка не осуществлена"); 
                          while(!kbhit()); 
                          k=1;break;} 
                 case 2: { 
                          cout<<Rus("введите искомое число:"); 
                          int t; 
                          cin>>t; 
                          if(l1.Find(t))cout<<Rus("искомое число есть в списке."); 
                          else cout<<Rus("искомого числа нет в списке."); 
                          while(!kbhit()); 
                          k=2;break;} 
                 case 3: { 
                          cout<<Rus("введите число, которое надо вставить:"); 
                          int t;cin>>t; 
                          cout<<Rus("введите число, после которого надо вставить:"); 
                          int key;cin>>key; 
                          if( (l1.Insert(key,t)) )cout<<Rus("вставка осуществлена"); 
                          else cout<<Rus("вставка не осуществлена"); 
                          while(!kbhit()); 
                          k=3;break;} 
                 case 4: { 
                          cout<<Rus("введите число, которое надо удалить:"); 
                          int t;cin>>t; 
                          if( (l1.Remove(t)) )cout<<Rus("удаление осуществлено"); 
                          else cout<<Rus("такого числа нет в списке."); 
                          while(!kbhit()); 
                          k=4;break;} 
                 case 5:{exit(0);} 
                  }  }  }
вот что-то мне паказали и сказали переделать но нет сил.........

Последний раз редактировалось Sazary; 13.12.2009 в 04:38.
Кнопка вне форума Ответить с цитированием
Старый 13.12.2009, 02:06   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

так что тут не понятно? мне не особо охота копаться в куче кода просто потому, что тебе это нужно сдать
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста помогите! Массив нужно свернуть в кольцо Gothar Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2009 21:10