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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 08:27   #1
Micar
Новичок
Джуниор
 
Регистрация: 07.06.2010
Сообщений: 1
По умолчанию Циклический связный список

Добрый день.
Преподователь просит реализовать очередь на базе циклического связного списка(последний элемент указывает на первый ) . Те реализовать функцию добвления, удаления и просмотра списка ,причём с помощью использования указателя последний элемент. Не понимаю как это сделать.
Подскажите пожалуйста.

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

//=================================== =============
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
//=================================== =============
struct list
{
int data;
list *next;
};
list *first = 0;
int count = 0;
//=================================== =============
char *rus(char *source)
{
char *res = new char[strlen(source)];
CharToOemA(source, res);
return res;
}
//=================================== =============
void add(int a)
{
list *newlist = new list;
newlist->data = a;
list *temp = first;
if(first)
{
int n =1;
while(n<count)
{
first=first->next;
n++;
}
first->next = newlist;
first=first->next;
first->next = temp;
first=first->next;
}
else
{
first = newlist;
first->next = first;
}
count++;
}
//=================================== =============
void del(int n)
{

cout<<endl;
list *temp = first;
if(n>=count)
return;
if(n == 1)
{
n = count+1;
first = first ->next;

}
n--;
if(count>1)
{
while(n>1)
{
temp=temp->next;
n--;
}
cout<<rus("Óäàëÿåìûé ýëåìåíò : ")<<temp->next->data;
list *delelem = temp->next;
temp->next=temp->next->next;
delete delelem;
count--;
}
else
{
delete temp;
temp=0;
count--;
}
}
//=================================== =============
void show()
{
list *temp = first;
int i =1;
cout<<endl;
if(count == 0)
{
cout<<rus("\nÑïèñîê ïóñò\n");
return;
}
while(i<=count)
{
cout<<rus("Ýëåìåíò ¹ ")<<i++<<" "<<temp->data<<endl;
temp=temp->next;
}
}
//=================================== =============
int main()
{
int tmp;
char key;
do
{
cout<<rus("\nÂûáåðèòå äåéñòâèå.\n1.Äîáàâèòü ýëåìåíò\n2.Óäàëèòü ýëåìåíò\n3.Ïîêàçàòü ñïèñîê\n4.Âûõîä");
key = getch();
switch(key)
{
case '1':
cout<<rus("\nÂâåäèòå ýëåìåíò :");
cin>>tmp;
add(tmp);
break;
case '2':
cout<<rus("\nÂâåäèòå íîìåð ýëåìåíòà :");
cin>>tmp;
del(tmp);
break;
case '3':
show();
break;
};
}while(key!='4');
return 0;
}
//=================================== =============
Micar вне форума Ответить с цитированием
Старый 08.06.2010, 20:28   #2
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Код:
//=================================== =============
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
//=================================== =============
struct list
{
	int data;
	list *next;
};
list *last = NULL;
//=================================== =============
char *rus(const char *source)
{
	char *res = new char[strlen(source)+1];
	CharToOemA(source, res);
	return res;
}
//=================================== =============
void add(int a)
{
	list *newlist = new list;
	newlist->data = a;
	if(last)
	{
		newlist->next = last->next;
		last->next = newlist;
	}
	else
		newlist->next = newlist;
	last = newlist; 
}
//=================================== =============
void del(int n)
{
	list *temp = last;
	if(last == NULL) return;
	if(last->next != last)
	{
		while(temp->next != last && temp->next->data != n)
			temp = temp->next;
		if (temp->next->data == n)
		{
			if(temp->next == last)
				last = temp;
			list* delelem = temp->next;
			temp->next = temp->next->next;
			delete delelem;
		}
	}
	else if (last->data == n)
	{
		delete last;
		last = NULL;
	}
}
//=================================== =============
void show()
{
	list *temp = last;
	cout<<endl;
	if(last == NULL)
	{
		cout << rus("\nNienie iono\n");
		return;
	}	
	do {
		cout << rus("Yeaiaio ? ") << " " <<temp->next->data << endl;
		temp = temp->next;
	} while(temp != last);
}
//=================================== =============
int main()
{
	int tmp;
	char key;
	do
	{
		cout << rus("\nAuaa?eoa aaenoaea.\n1.Aiaaaeou yeaiaio\n2.Oaaeeou yeaiaio\n3.Iieacaou nienie\n4.Auoia");
		key = getch();
		switch(key)
		{
		case '1':
			cout << rus("\nAaaaeoa yeaiaio :");
			cin >> tmp;
			add(tmp);
			break;
		case '2':
			cout << rus("\nAaaaeoa iiia? yeaiaioa :");
			cin >> tmp;
			del(tmp);
			break;
		case '3':
			show();
			break;
		}
	} while(key != '4');
	return 0;
}
//=================================== =============
примерно так
n@sok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг Mish92(21-09) Помощь студентам 0 07.11.2009 21:59
Циклический список на С++ Йэжиг Общие вопросы C/C++ 1 12.10.2009 22:42
Инвертировать связный список levandowskiy Общие вопросы C/C++ 2 21.08.2009 15:20
Как заполнить связный список? levandowskiy Общие вопросы C/C++ 1 18.08.2009 09:00