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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 22:10   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Вопрос Нужна помощь с доработкой.двусвязный список(С++).Удалить ел-т в заданой позиции.

Выводит не правильно((
Вот код:
Код:
#include <iostream>
#include <windows.h>
using namespace std;

class Node
{
public:
	int number;
	Node* next;
	Node* last;
};

void russia(const char* rus)
{
	char word[100];
	CharToOem(rus, word);
	cout<<word;
}


int main()
{
	Node* head = NULL;
	Node* tail = NULL;
	Node* ptrLast = NULL;
    int n;
    
        cout<<"Enter size of list:";
        cin>>n;

cout<<"Enter number: ";

		for(int i=0;i<n;i++)
		{
			int numb = -1;
			cin>>numb;
			Node* ptr = new Node;
			ptr->number = numb;
			ptr->next = NULL;
			tail = ptr;
			if (head == NULL)
			{
				head = ptr;
				ptrLast = ptr;
				ptr->last = NULL;

			}
			ptr->last = ptrLast;
			ptrLast->next = ptr;
			ptrLast = ptr;
		}

			system("CLS");
			Node* ptr = NULL;
			int key = -1;
			if (head == NULL)
			{
				russia("\t!!! List is Empty !!!\n\n");
				system("PAUSE");
				system("CLS");
			}
			russia("Enter number of element which we must delete: ");
			cin>>key;
			ptr = head;
            for(int count=1;;count++,ptr->number)
			{
				
                if (key == count)
				{
                    russia("\n\t!!! Element deleted !!!\n");
                    delete ptr;
					break;
				}
				if (ptr->next == NULL)
				{
					russia("\n\t!!! Not found !!!\n");
					break;
				}
				ptr = ptr->next;
			}

			system("CLS");
			ptr = head;
			while (1)
			{
				cout<<ptr->number<<" ";
				if (ptr->next == 0)
					break;
				ptr = ptr->next;
			}
			cout<<"\n\n";
			system("PAUSE");
			system("CLS");

			system("PAUSE");
            return 0;
            }
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 28.05.2009, 00:14   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Выводит не правильно((
я бы сказал - вообще не выводит

вы не сохраняете связи в списке перед удалением, должно быть вот так

Код:
for(int count=1;;count++,ptr->number)
	{
	      if (key == count)
	      {
                      if(ptr==head)
		{
		   head=ptr->next;
		}
		russia(L"\n\t!!! Element deleted !!!\n");
		ptr->last->next=ptr->next;
                       delete ptr;
		break;
	      }
	      if (ptr->next == NULL)
	      {
		russia(L"\n\t!!! Not found !!!\n");
		break;
	      }
	      ptr = ptr->next;
}
и еще...

у вас компилятор не ругается на это

Код:
void russia(const char* rus)
{
	char word[100];
	CharToOem(rus, word);
	cout<<word;
}
должно быть так

Код:
void russia(const wchar_t* rus)
{
	char word[100];
	CharToOem(rus, word); // функция конвертирует строку из уникода в аски
	cout<<word;
}
и далее вызов

Код:
russia(L"\n\t!!! Element deleted !!!\n")

Последний раз редактировалось counter; 28.05.2009 в 00:18.
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в тексте удалить слова начинающиеся с заданой буквы Ananim-Pbl6ak Паскаль, Turbo Pascal, PascalABC.NET 9 26.05.2009 16:39
Двусвязный список kruserg Паскаль, Turbo Pascal, PascalABC.NET 1 28.04.2009 10:37