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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2011, 23:14   #1
Sergey Zhlobo
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 16
По умолчанию Работа с массивом односвязных списков

нужна помощь с кодом в следующей программе:
Разработать программу работу с массивом односвязных списков. Программа должна содержать следующие процедуры, вызываемые из меню:
-построение массива односвязных списков, вводя исходные данные из текстового файла;
-добавление нового элемента в указанный список;
-вывод указанного списка.
Sergey Zhlobo вне форума Ответить с цитированием
Старый 28.02.2011, 23:53   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

и чем помочь? написать за тебя?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.03.2011, 00:14   #3
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <assert.h>

using namespace std;


template <class NODETYPE> class List;

template <class NODETYPE> class ListNode{						

	friend class List<NODETYPE>;//объявление List friend-функцией

public:
	ListNode(const NODETYPE &){
		data=info;		//при инициализации мы имеем всего 1 элемент - возможно 0
		nextPtr=0;		//и указатель на следующий элемент - указатель на 0 - конец списка}//конструктор
	}
	NODETYPE getData()const;//возвращение данных в узле
private:
	NODETYPE data;//данные
	ListNode *nextPtr;//указатель на следующий узел в списке
};

//описание конструктора
//template <class NODETYPE> ListNode::ListNode(const NODETYPE&info){
	
//}

//возвращает копию данных в узле
template <class NODETYPE> NODETYPE ListNode<NODETYPE>::getData()const{
	return data;
}

template <class NODETYPE> class List{
public:
	List();//конструктор
	~List();//деструктор
	void insertAtFront(const NODETYPE&);
	void insertAtBack (const NODETYPE&);
	int removeFromFront(NODETYPE&);
	int removeFromBack (NODETYPE&);
	int isEmpty();
	void print() const;
private:
	ListNode<NODETYPE> *firstPtr;//указатель на первый узел
	ListNode<NODETYPE> *lastPtr;//указатель на последний узел
	ListNode<NODETYPE> *getNewNode(const NODETYPE&);//утилита ???
};

//конструктор по умолчанию
template <class NODETYPE> List <NODETYPE>::List(){
	this->firstPtr=this->lastPtr=0;
}

//деструктор
template <class NODETYPE> List<NODETYPE>::~List(){
	if (!(isEmpty())){//если список НЕ пустой
		//cout<<"Удаление узлов . . .\n";
		ListNode<NODETYPE> *currentPtr=firstPtr,*tempPtr;

		while(currentPtr!=0){//пока текущий указатель не указывает на 0 (не дошли до последнего элемента)
			tempPtr=currentPtr;
			//cout<<tempPtr->data<<endl;
			currentPtr=currentPtr->nextPtr;
			delete tempPtr;//удалить текущий элемент  на который указывает tempPtr
		}
	}
	//cout<<"Все узлы удалены\n\n";
}

//Вставка в начало списка
template <class NODETYPE> void List<NODETYPE>::insertAtFront(const NODETYPE&value){
	ListNode<NODETYPE> *newPtr=getNewNode(value);

	if (isEmpty())		//если список пустой
		firstPtr=lastPrt=newPtr;
	else{
		newPtr->nextPtr= firstPtr;
		firstPtr=newPtr;
	}
}

//Вставка узла в конец списка
template <class NODETYPE> void List<NODETYPE>::insertAtBack(const NODETYPE&value){
	ListNode<NODETYPE>*newPtr=getNewNode(value);

	if (isEmpty())//если список пустой
		firstPtr=lastPtr=newPtr;
	else{
		lastPtr->nextPtr=newPtr;
		lastptr=newPtr;
	}
}

//Удаление узла из начала списка
template <class NODETYPE> int List<NODETYPE>::removeFromFront(NODETYPE&value){
	if (ifEmpty())//если список пустой
		return 0;	//список пустой - из него нечего удалять
	else{
		ListNode<NODETYPE> *tempPtr=firstPtr;

		if(firstPtr==lastPtr)
			firstPtr=lastPtr=0;
		else
			firstPtr=firstPtr->nextPtr;

		value = tempPtr->data;//перемещение данных
		delete tempPtr;
		return 1;
	}
}

//Удаление узла из конца списка
template <class NODETYPE> int List<NODETYPE>::removeFromBack(NODETYPE&value){
	if (ifEmpty())//если список пустой 
		return 0;	//вернуть 0 - удаление не удалось
	else{
		ListNode<NODETYPE>*tempPtr=lastPtr;

		if (firstPtr==lastPtr)
			firstPtr=lastPtr=0;
		else{
			ListNode<NODETYPE> *currentPtr=firstPtr;

			while(currentPtr->nextPtr!=lastPtr)
				currentPtr=currentPtr->nextPtr;
			lastPtr=currentPtr;
			currentPtr->nextPtr=0;
		}
		value=tempPtr->data;
		delete tempPtr;
		return 1;
	}
}

//Является ли список пустым?
template <class NODETYPE> int List<NODETYPE>::isEmpty(){
	return (firstPtr==0);
}

//возвращение указателя на ближайший узел
template <class NODETYPE> ListNode<NODETYPE> *List<NODETYPE>::getNewNode(const NODETYPE&value){
	ListNode<NODETYPE>*ptr=new ListNode<NODETYPE>(value);

	assert (prt!=0);
	return ptr;
}

//отображение на экране содержимого List
template <class NODETYPE> void List<NODETYPE>::print()const{
	if (ifEmpty()){
		cout<<"Список пуст\n\n";
		return;
	}
	ListNode<NODETYPE>*currentPtr=firstPtr;
	//cout<<"Список состоит из:";
	while(currentPtr!=0){
		cout<<currentPtr->data<<" ";
		currentPtr=currentPtr->nextPtr;
	}
	cout<<"\n\n";
}

int main(){
	
}
а дальше - сами
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 01.03.2011, 11:05   #4
Sergey Zhlobo
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 16
По умолчанию

спасибо....
Sergey Zhlobo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с сортировкой односвязных списков на Pascal Lesowik Помощь студентам 2 22.05.2011 06:14
Работа с массивом monkey1631 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 19.04.2010 01:16
работа с массивом Андрей.12 Помощь студентам 2 22.10.2009 00:25