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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2013, 23:25   #1
fuzzyduzzy
 
Регистрация: 12.10.2012
Сообщений: 8
По умолчанию Односвязные списки в с++

Здравствуйте! Подскажите плиз как организовывается добавление елемента в список по заданной позиции...

Добавление в конец списка
Код:
void List::Add(int data){
	Element *temp = new Element;
	temp->data = data;
	temp->next = NULL;

	if(head != NULL){
		tail->next = temp;
		tail = temp;
	}
	else{
		head = tail = temp;	
	}
	count++;
}

Последний раз редактировалось fuzzyduzzy; 17.01.2013 в 23:27.
fuzzyduzzy вне форума Ответить с цитированием
Старый 17.01.2013, 23:41   #2
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Мда... А название темы оригинальное...
Update:
Уже нет. А жаль...
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут

Последний раз редактировалось Izobara; 17.01.2013 в 23:53.
Izobara вне форума Ответить с цитированием
Старый 17.01.2013, 23:49   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А название темы оригинальное..
уже нет, я исправил
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.01.2013, 00:06   #4
fuzzyduzzy
 
Регистрация: 12.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Izobara Посмотреть сообщение
Мда... А название темы оригинальное...
Update:
Уже нет. А жаль...
наверное кнопка не нажалась))
fuzzyduzzy вне форума Ответить с цитированием
Старый 18.01.2013, 02:18   #5
fuzzyduzzy
 
Регистрация: 12.10.2012
Сообщений: 8
По умолчанию

Код:
void List::Insert(int pos){
 
    cout << "Input position: ";
    cin >> pos;
 
    if(pos < 1 || pos > count + 1){
        cout << "Incorrect position!\n";
        return;
    }
 
    else{
        int i = 1;
        Element *Ins = head;
        while(i < pos){
            Ins = Ins->next;
            i++;
        }
 
        Element *t = Ins->next;
        Element *tmp = new Element;
        cout << "Input Element: ";
        cin >> tmp->data;
 
        Ins->next = tmp;
        tmp->next = t;
 
    //  count++;
    }
}
У меня идет смещение на 1... То есть если я выбираю позицию 4 то значение встанет на 5 позицию.... Можете проверить правильность кода
fuzzyduzzy вне форума Ответить с цитированием
Старый 18.01.2013, 02:47   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
У меня идет смещение на 1... То есть если я выбираю позицию 4 то значение встанет на 5 позицию
А почему это позиция не может быть нулевой? И заблокирована возможность вставить в самое начало списка?
Цитата:
if(pos < 1
EUGY вне форума Ответить с цитированием
Старый 18.01.2013, 10:35   #7
fuzzyduzzy
 
Регистрация: 12.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
А почему это позиция не может быть нулевой? И заблокирована возможность вставить в самое начало списка?
Вставка в начало списка будет реализована другим методом
fuzzyduzzy вне форума Ответить с цитированием
Старый 18.01.2013, 21:35   #8
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

зачем же, лучше универсальный.
зачем пользователю париться и отслеживать в начало он вставляет или нет?
denrubun вне форума Ответить с цитированием
Старый 19.01.2013, 00:10   #9
fuzzyduzzy
 
Регистрация: 12.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от denrubun Посмотреть сообщение
зачем же, лучше универсальный.
зачем пользователю париться и отслеживать в начало он вставляет или нет?
Код:
#include "Element.h"

List::List(){
	head = tail = NULL;
	count = 0;
}

List::~List(){
	DelAll();
}

void List::Add(int data){
	Element *temp = new Element;
	temp->data = data;
	temp->next = NULL;

	if(head != NULL){
		tail->next = temp;
		tail = temp;
	}
	else{
		head = tail = temp;	
	}
	count++;
}

void List::Print(){
	Element *temp = head;
	if(head == 0)
		cout << "Список пуст" << endl;
	else{
		while(temp != 0){
			cout << temp->data << " ";
			temp = temp->next;
		}
	}
	cout << endl << endl;
}

void List::Insert(int pos){

   if(pos < 1 || pos > count + 1){
		cout << "Ошибка! Неверно введена позиция или список пуст\n";
		return;
	}

	else if(pos == 1){
		Element *ntmp = new Element;
		cout << "Введите элемент: ";
		cin >> ntmp->data;
		ntmp->next = head;
		head = ntmp;
	}

	else{
		int i = 1;
		Element *Ins = head;
		while(i < pos - 1){
			Ins = Ins->next;
			i++;
		}

		Element *t = Ins->next;
		Element *tmp = new Element;
		cout << "Введите элемент: ";
		cin >> tmp->data;

		Ins->next = tmp;
		tmp->next = t;
	}
	count++;
}

void List::Del(int pos){
	if(pos < 1 || pos > count + 1){
		cout << "Ошибка! Неверно введена позиция или список пуст\n";
		return;
	}

	else if(pos == 1){
		Element *h = head;
		Element *nh = h->next;
		head = nh;
		delete h;
	}

	else{
		int i = 1;
		Element *Del = head;
	
		while(i < pos - 1){
			Del = Del->next;
			i++;
		}
	
		Element *dElem = Del->next;
		Element *AfterDel = dElem->next;
		Del->next = AfterDel;
		delete dElem;
	}
	count--;
}

void List::Search(int sch){
	Element *ptr = head;
	count = 1;
	if(ptr == NULL)
		cout << "Список элементов пуст";
	else{
		while(ptr->data != sch && ptr->next != NULL){
			ptr = ptr->next;
			count++;
		}
	}
	if(ptr->data == sch)
		cout << "Позиция искомого элемента: " << count << endl;
	else
		cout << "Элемент не найден" << endl;
}

void List::Del(){
	Element *del = head;
	head = head->next;
	delete del;
}

void List::DelAll(){
	while(head != 0)
		Del();
}
Все сделал)) Может кому-нить пригодиться...
fuzzyduzzy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C] Односвязные списки acmilanfan Помощь студентам 0 17.05.2012 23:22
Односвязные списки. Killspamers Помощь студентам 7 19.03.2012 18:59
Односвязные списки Nike0 Общие вопросы C/C++ 0 26.12.2010 12:07
Односвязные списки Anna T Паскаль, Turbo Pascal, PascalABC.NET 2 19.12.2010 18:58
Односвязные списки art_stalker Общие вопросы C/C++ 5 21.04.2010 22:49