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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2011, 18:41   #1
datileo
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 20
По умолчанию Как упростить программу по спискам? Сделать код наиболее простым и понятным без всяких наворотов

Написать функцию освобождения памяти занятой списком...

Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct list
{
	list *prev;
	list *next;
	int number;
};

//заголовки функций
int addlist();
void printlist();
int deletelist();

list *l;//указатель на список
list *last;//указатель на последний элемент
int count=0;//количество элементов в списке

int main(void)
{
	char menuitem;//пункт меню

	do
	{
		printf("\n\n1 - Add item to list\n2 - Print list\n3 - Delete list\n0 - Exit\n\nPress 0..3 button to select action...\n\n");//печать меню
		menuitem=_getch();//считать символ
		switch (menuitem)//выполнение действий
		{
		case '1':
			{
				addlist();
				break;
			};
		case '2':
			{
				printlist();
				break;
			};
		case '3':
			{
				deletelist();
				break;
			}
		};
	} while (menuitem!='0');
	return 0;
}

//добавление списка
int addlist()
{
	int n;//число
	list *p;//текущий элемент чпичка

	printf("Enter the number ");scanf_s("%d",&n);//ввод числа
	if (count==0)//создание первого элемента списка
	{
		l=new list;
		l->next=NULL;//соседей нет
		l->prev=NULL;
		l->number=n;//сохранение числа
	}
	if (count==1)//создание второго элемента списка
	{
		last=new list;
		l->next=last;//у первого элемента появляется сосед справа
		last->prev=l;//у второго сосед слева первый
		last->next=NULL;//соседа справа нет
		last->number=n;
	}
	if (count>1)//обычное создание элеиента
	{
		p=new list;
		last->next=p;//сосед последнего справа текущий
		p->prev=last;//сосед текущего слева послений
		p->next=NULL;//соседа справа нет
		p->number=n;
		last=p;//последний это текущий
	}
	count++;//увеличение и возврат счетчика
	return count;
}

//печать списка на экран
void printlist()
{
	list *p;//текущий элемент

	printf("Print list items\n");
	if (l!=NULL)
	{
		printf("%d\n",l->number);//печать первого элемента
		if (l->next!=NULL)//проверка наличия других элементов
		{
			p=l;//текущий элемент будет первым
			do
			{
				p=p->next;//текущий будет следующим
				printf("%d\n",p->number);//вывод на экран
			}
			while (p->next!=NULL);//продолжаем, если есть соседи справа
		}
	}
}

//удаление списка
int deletelist()
{
	list *p;//текущий элеимент

	if (l!=NULL)//если список не пустой
	{
		do//цикл
		{
			p=last;//последний элемент становится текущим
			last=last->prev;//предпоследний элемент становится последним
			delete p;//удаляем текущий последний элемент
			count--;//уменьшаем счетчик
		}
		while (last!=l);//выполняем пока первый и последний элемент не равны
	}
	delete l;//удаляем первый элемент
	count--;
	return count;//возврящаем текущее число элементов в списке
}
datileo вне форума Ответить с цитированием
Старый 09.06.2011, 15:10   #2
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

есть такой замечательный контейнер в STL : list
все ваши манипуляции делает одной строкой.
Kukurudza вне форума Ответить с цитированием
Старый 09.06.2011, 22:20   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от datileo Посмотреть сообщение
Написать функцию освобождения памяти занятой списком...
иии? может вопросы какие есть?
мне вот кажется, что все это добро выдрано у соседа, а вам дали другое задание!
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевести код на С++.. надо сделать программу в Borland C++ Helena_pr Фриланс 2 20.11.2010 00:39
Как можно упростить программу? Евгений92 Общие вопросы C/C++ 0 07.11.2010 17:50
Упростить код Shouldercannon Общие вопросы Delphi 7 20.10.2010 17:01
как упростить код, используя только массивы, циклы, разветвления и указатели? laxe Общие вопросы C/C++ 22 01.09.2009 09:16