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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2012, 23:43   #1
Sobaka_ru
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 44
По умолчанию Добавление узла после заданного

Вот код который нужно переделать под " добавление узла после заданного
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
#include <cstdlib>
using namespace std;

struct LIST {   // Создание структуры
int info;
LIST *next;
LIST *prev;
};

LIST *head;
int n1, n2;

void Initial() // Процедура создания узла
{
head = new LIST;
head->next=head;
head->prev=head;
}

int Empty()
{
if (head->next==head && head->prev==head)
return 1;
else
return 0;
}

LIST *SearchOnward(int num)
{
LIST *tmp=head->next;
while(tmp!=head && tmp->info!=num)
{
tmp=tmp->next;
n1+=1;
}
if (tmp!=head)
return tmp;
else
return NULL;
}

LIST *SearchBack(int num)
{
LIST *tmp=head->prev;
while(tmp!=head && tmp->info!=num)
{
tmp=tmp->prev;
n2+=1;
}
if (tmp!=head)
return tmp;
else
return NULL;
}

int Del(int num)
{
LIST *current=SearchOnward(num);
if (current!=NULL)
{
current->prev->next=current->next;
current->next->prev=current->prev;
delete current;
return 1;
}
return 0;
}

int AddAfter(int num, int point) // Добавление после выбранного узла
{
if (Empty()==1)
{
LIST *tmp=new LIST;
tmp->next=head;
tmp->prev=head;
tmp->info=num;
head->next=tmp;
head->prev=tmp;
return 1;
}
LIST *current=SearchOnward(point);
if (current!=NULL)
{
LIST *tmp=new LIST;
tmp->next=current->next;
tmp->prev=current;
tmp->info=num;
current->next->prev=tmp;
current->next=tmp;
return 1;
}
return 0;
}


void ShowOnward() // Процедура вывода в прямом направлении
{
LIST *tmp=head->next;
cout << endl << "В прямом направлении:" << endl;
while(tmp!=head)
{
cout << tmp->info << " ";
tmp=tmp->next;
}
cout << endl;
}


int main() // Главная программа
{
setlocale(LC_ALL,"Russian");
Initial();
int num, tmp, lost;
char otv, otv2;
do //                        выводим меню
{
cout <<endl<< "1. Добавление" << endl
<< "2. Вывод"<< endl
<< "0. Выход" << endl
<< "Выберите из меню: ";
cin >> otv;
switch(otv)
{
case '1':
cout << endl << "Введите элемент = ";
cin >> num;
if (Empty()==1)
{
AddAfter(num,0);
lost=num;
cout << endl << "Элемент добавлен" << endl;
}
else
{
cout << endl << "1. Добавить в конец списка" 
<< endl << "Выберите из меню: ";
cin >> otv2;
switch(otv2)

{
case '1':
tmp=lost;
lost=num;
if (AddAfter(num,tmp)==1)

cout << endl << "Элемент добавлен" << endl;
else
cout << endl << "Такого элемента не существует" << endl;
break;
default:
cout << endl << "Ошибка" << endl;

break;
}

}
break;

case '2':
if(Empty()==1)
cout << endl << "Список пуст" << endl;
else
{
cout << endl << "1. Обход в прямом напрвлении" << endl
<< "Выберите из меню: ";
cin >> otv2;
switch(otv2)
{
case '1':
ShowOnward();
break;
default:
cout << endl << "Ошибка" << endl;
break;
}
}
break;

case '0':
break;
default:
cout << endl << "Ошибка" << endl;
break;
}

}while(otv!='0');
cin.get();

}
А это добавление в конец списка..
Sobaka_ru вне форума Ответить с цитированием
Старый 25.01.2012, 00:47   #2
Sobaka_ru
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 44
По умолчанию

Вот нашел... Только надо лишнее поудалять.. Может кто с этим разобраться и скинуть код нормальный...??? Можно еще с построчным пояснением.
Код:
#include "stdafx.h"
#include <iostream>

using namespace std;

class linklist
{
     private:

             struct node
         {
              int data;
            node *link;
         }*p;

   public:

             linklist();
         void append( int num );
         void add_as_first( int num );
         void addafter( int c, int num );
         void del( int num );
         void display();
         int count();
         ~linklist();
};

linklist::linklist()
{
     p=NULL;
}

void linklist::append(int num)
{
     node *q,*t;

   if( p == NULL )
   {
        p = new node;
      p->data = num;
      p->link = NULL;
   }
   else
   {
        q = p;
      while( q->link != NULL )
           q = q->link;

      t = new node;
      t->data = num;
      t->link = NULL;
      q->link = t;
   }
}

void linklist::add_as_first(int num)
{
     node *q;

   q = new node;
   q->data = num;
   q->link = p;
   p = q;
}

void linklist::addafter( int c, int num)
{
     node *q,*t;
   int i;
   for(i=0,q=p;i<c;i++)
   {
        q = q->link;
      if( q == NULL )
      {
           cout<<"\nThere are less than "<<c<<" elements.";
         return;
      }
   }

   t = new node;
   t->data = num;
   t->link = q->link;
   q->link = t;
}

void linklist::del( int num )
{
     node *q,*r;
   q = p;
   if( q->data == num )
   {
        p = q->link;
      delete q;
      return;
   }

   r = q;
   while( q!=NULL )
   {
        if( q->data == num )
      {
           r->link = q->link;
         delete q;
         return;
      }

      r = q;
      q = q->link;
   }
   cout<<"\nElement "<<num<<" not Found.";
}

void linklist::display()
{
     node *q;
   cout<<endl;

   for( q = p ; q != NULL ; q = q->link )
        cout<<endl<<q->data;

}

int linklist::count()
{
     node *q;
   int c=0;
   for( q=p ; q != NULL ; q = q->link )
        c++;

   return c;
}

linklist::~linklist()
{
     node *q;
   if( p == NULL )
        return;

   while( p != NULL )
   {
        q = p->link;
      delete p;
      p = q;
   }
}

int main()
{
     linklist ll;
   cout<<"No. of elements = "<<ll.count();
   ll.append(12);
   ll.append(13);
   ll.append(23);
   ll.append(43);
   ll.append(44);
   ll.append(50);

   ll.add_as_first(2);
   ll.add_as_first(1);

   ll.addafter(3,333);
   ll.addafter(6,666);

   ll.display();
   cout<<"\nNo. of elements = "<<ll.count();

   ll.del(333);
   ll.del(12);
   ll.del(98);
   cout<<"\nNo. of elements = "<<ll.count();
   return 0;
}
Sobaka_ru вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена регистра у текста в кавычка после заданного слова berezka04 Microsoft Office Word 18 26.09.2011 09:43
Добавление в конец списка определённых ячеек после нажатия на кнопку Diamondik Microsoft Office Excel 12 19.04.2011 16:44
C++(удаления узла) Xaceo Помощь студентам 1 28.03.2011 18:05
сохранения данных в стрингриде после редактирования его (добавление) ansysadmin БД в Delphi 0 23.11.2009 17:37
Вывод на экран списка статей, опубликован-ных после заданного года Igor571 Паскаль, Turbo Pascal, PascalABC.NET 2 01.12.2008 08:23