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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 18:05   #1
R'nhbyV
Пользователь
 
Регистрация: 25.01.2013
Сообщений: 17
Лампочка односвязный список (visual C++)

Помогите, пожалуйста))
вот моя задача(первые 4 пункта я сделала,а вот 5 и 6 нет )
1. Вывод списка.
2. Вставка элемента в заданную позицию списка.
3. Удаление элемента из заданной позиции списка.
4. Удаление всех элементов из списка.
5. Проверка списка на упорядоченность его элементов.
6. Объединение двух списков. В результате должен получиться третий список, в котором элементы списков чередуются до тех пор, пока один из списков не будет исчерпан. Оставшийся «хвост» более длинного списка помещается в конец нового списка.

(Visual c++)

Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include<clocale>
using namespace std;

struct item
{
	int data;
	item *next;
	
};
//функция добавления элемента
void add(item *&top,int pos, int x)
{
	int j=1;
	int i; item *pnew, *p=top;
	pnew=new item; pnew->data=x;
	if (pos<=1||top==NULL) 
	{
		pnew->next=top; top=pnew;
	}
	else
	{
		for(i=1;i<pos-1;i++) 
			if (p->next!=NULL) 
			{	
				p=p->next;
				j++;
			}
		if (pos<=j+1)
		{
			pnew->next=p->next; p->next=pnew;
		}
	}
}


// вывода списка
void print(item *top)
{
	item *p=top;
	while (p!=NULL) 
	{
		cout<<p->data<<' '; 
		p=p->next;
	}
	cout<<endl;
}
//удалить все элементы
void clrscr(item *&top)
{
	while(top!=NULL)
	{ 
		if(top==NULL) 
		{ 
			cout<<"спиок пуст!"<<endl; 
		}
		else 
		{
			item *p=top;
			top=top->next; 
			delete p; 
       }
	}
}

//удаление элемента 
void delet(item *&top, int pos2)
	{
		item *a=top,*b;
		int i=0;
		while(a!=NULL)
		{
			a=a->next;
			i++;
		}
		if(pos2>i||pos2<1) 
		{
			cout<<"такой позиции в списке нет!"<<endl;
		}
		
		else
		{
			if(pos2==1)
			{
				a=top->next;//если эл-т первый
				top=a;
			}
			if (pos2>1)
			{
				i=1;//если эл-т не первый
				a=top;
				while (i!=pos2-1) 
				{
					i++; a=a->next;
				}

				b=a->next;
				a->next=b->next;//сдвигаем
				delete b;
			}
		}
}
//порядок...вот это не работает:(

int poryadok(item *top)
               { item *q1,*q2;

int l;
q1=top;
int i=0;int pos=0;
int j=0;
while (q1!=NULL){
	q2=q1->next;
	l=q1-q2;
	q1=q1->next;
	pos++;
		if(l>0){i++;}
		else {j++;}
}if(i==pos){cout<<"упорядочено по убыванию\n";}
else {if(j==pos){cout<<"упорядочено по возрастанию\n";}
else{cout<<"не упорядочено\n";}}
return 0;}
//объединение.вот это не работает:(
void obedinenie(item *top){
	cout<<"список 1: ";
     print(top);int b;int a;int r;int c;int i;int f;
	 item *p;
	 cout<<"введите количество элементов в списке: ";
		cin>>b;
		if (b!=0)
			for (int f=1; f<=b; f++) // формирование списка
			{
				a=rand()%100;
				add(top,f,a); // вставка элемента 
			}
			cout<<"список 2: ";
		print(top); // вывод списка на экран
		int k=4;int g=k+b;
		if(g!=0)
			for (int h=1;h<=g;h++)
			{if(!(h%2)){ cout<<p->data<<' '; 
		p=p->next;}
			else{ cout<<p->data<<' '; 
		p=p->next;}}
}

int main() {
	setlocale(LC_ALL,"Russian");
     int pos, pos1, pos2, otv, da;
	 item *first, *last;
	 int x,r,k,m,y,j;
	item *top=NULL;

	
		cout<<"введите количество элементов в списке: ";
		cin>>k;
		if (k!=0)
			for (int i=1; i<=k; i++) 
			{
				r=rand()%100;
				add(top,i,r);  
			}
		print(top); 
		
	
		cout<<"Введите номер позиции для вставки: ";
		cin>>pos;
		cout<<"Введиде значение элемента для вставки: ";
		cin>>x;
		add(top,pos,x); // добавление элементов в любую позицию списка
		print(top);
	
		cout<<"Введите номер позиции элемента для удаления: ";
		cin>>pos2;
		delet(top,pos2);
		print(top);
		poryadok(top);
		obedinenie(top);

		cout<<"Удалить все элементы? да-1, нет-2 : ";
		int l;
		cin>>l;
		if (l==1){
			void clrscr(item *&top);
				cout<<"Элементы удалены.";
		}
		else {cout<<"элементы не удалены : ";
		print(top);
		}
	cin.get();
	cin.get();

}

Последний раз редактировалось R'nhbyV; 25.01.2013 в 19:09.
R'nhbyV вне форума Ответить с цитированием
Старый 25.01.2013, 18:57   #2
R'nhbyV
Пользователь
 
Регистрация: 25.01.2013
Сообщений: 17
Лампочка

ПОМОГИТЕ,ПОЖАЛУЙСТА

Последний раз редактировалось R'nhbyV; 25.01.2013 в 19:17.
R'nhbyV вне форума Ответить с цитированием
Старый 25.01.2013, 19:21   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Проверка упорядоченности
Код:
	while (q1->next!=NULL)
	{
		l=q1->data-(q1->next)->data;
		q1=q1->next;
		pos++;
		if(l>0) i++; else j++;
	}
	if(i==pos) cout<<"упорядочено по убыванию\n";
		else if(j==pos) cout<<"упорядочено по возрастанию\n";
			else cout<<"не упорядочено\n";
Чтобы объединить списки надо создать 2-ой список в программе (головы у них должны быть разными), заполнить, затем создать пустой 3-ий (это чтобы легче было его потом удалить). Затем в функцию передаём указатели на их головы, и одним циклом (пока нет конца одного из 2-х списков) добавляем в третий. Остаток одного из списка (чтобы не мучатся проверками, сразу 2 цикла по каждому списку пустить - если один из списков кончился, то цикл просто не сработает ни разу) также переписываем в новый список.
eoln вне форума Ответить с цитированием
Старый 25.01.2013, 19:25   #4
R'nhbyV
Пользователь
 
Регистрация: 25.01.2013
Сообщений: 17
По умолчанию

СПАСИБО,БОЛЬШОЕ
Я ПОПРИБУЮ СДЕЛАТЬ КАК ВЫ СКАЗАЛИ,ЕСЛИ ЧТО НЕ ПОЛУЧИТСЯ, Я СПРОШУ))
R'nhbyV вне форума Ответить с цитированием
Старый 25.01.2013, 20:13   #5
R'nhbyV
Пользователь
 
Регистрация: 25.01.2013
Сообщений: 17
По умолчанию

не могу понять как прописать это
Вы не можете помочь?
R'nhbyV вне форума Ответить с цитированием
Старый 25.01.2013, 20:34   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

В main запиши следующее
Код:
	cout<<"Введите номер позиции элемента для удаления: ";
	cin>>pos2;
	delet(top,pos2);
	print(top);
	poryadok(top);
	////////////////////
	item *top2=NULL;
	cout<<"введите количество элементов в списке 2: ";
	cin>>k;
	if (k!=0)
	for (int i=1; i<=k; i++)
	{
		r=rand()%100;
		add(top2,i,r);
	}
	print(top2);
	item *top3=NULL;
	obedinenie(top,top2,top3);
	print(top3);
	/////////////////////////////////////////////

	cout<<"Удалить все элементы? да-1, нет-2 : ";
Объединение
Код:
void obedinenie(item *top, item *top2, item *&top3)//пусть будет по аналогии
{
    item *q1=top;item *q2=top2; item *pnew;
    pnew=new item;
    top3=pnew;
    pnew->data=q1->data;
    q1=q1->next;
	while ((q1!=NULL)&&(q2!=NULL))
	{
	    pnew->next=new item;
	    pnew=pnew->next;
	    pnew->data=q2->data;
	    pnew->next=new item;
	    pnew=pnew->next;
	    pnew->data=q1->data;
	    q1=q1->next;
	    q2=q2->next;
	}
	while (q1!=NULL)
	{
	    pnew->next=new item;
	    pnew=pnew->next;
	    pnew->data=q1->data;
	    q1=q1->next;
	}
	while (q2!=NULL)
	{
	    pnew->next=new item;
	    pnew=pnew->next;
	    pnew->data=q2->data;
	    q2=q2->next;
	}
	pnew->next=NULL;
}
Особо не тестировал, при нескольких прогонах сработало. Никаких проверок на ошибки естественно тут нет.
eoln вне форума Ответить с цитированием
Старый 25.01.2013, 20:55   #7
R'nhbyV
Пользователь
 
Регистрация: 25.01.2013
Сообщений: 17
По умолчанию

спасибо,большое))))
R'nhbyV вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Односвязный список.??? Дмитрий_Попов Общие вопросы C/C++ 0 14.12.2011 21:10
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
[C] Односвязный список Dieno Помощь студентам 2 19.10.2009 18:52
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52