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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 19:22   #1
paladinn
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 26
По умолчанию Си++. Как это работает?

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

struct Telem
{
    int inf;  //INFORM ELEMENT
    Telem *link; // ykazatelb na sledyioshii element
} *begL, *endL;
//================================================================
// dobavlenie v nachalo 
void addElemAToBeginList()
{
    Telem *p = new Telem;
    printf("Vvedite noviy element: ");
    scanf("%d", &p -> inf);
    if(begL == NULL)
    {
        endL = p;
    }
    p -> link = begL;
    begL = p;
    printf("\n");
};
//================================================================
// dobavlenie v konec
void addElemToEndList()
{
    Telem *p = new Telem;
    printf("Vvedite noviy element: ");
    scanf("%d", &p -> inf);
    if(begL == NULL)
    {
        begL = p;
    }
    else
    {
        endL -> link = p;
    }
    p -> link = NULL;
    endL = p;
    printf("\n");
};

// ydalenie iz nachala
void deleteElemFromBeginList()
{
    Telem *p = begL;
    if(p == NULL)
    {
        printf("Spisok pust. Udalenie nevozmozhno!");
        printf("\n\n");
    }
    else
    {
        begL = p -> link;
        delete p;
    }
};
//================================================================
// ydalenie iz konca
void deleteElemFromEndList()
{
    Telem *p = begL;
    if(p == NULL)
    {
        printf("Spisok pust. Udalenie nevozmozhno!");
        printf("\n\n");
    }
    else
    {
        while((p -> link != endL) && (p -> link != NULL))
        {
            p = p -> link;
        }
        if(begL == endL)
        {
            begL = begL -> link;
            endL = NULL;
            delete p;
        }
        else
        {
            endL = p;
            delete p -> link;
            endL -> link = NULL;
        }
    }
};
парни объясните как это работает)

Последний раз редактировалось MaTBeu; 18.07.2009 в 17:59.
paladinn вне форума Ответить с цитированием
Старый 17.07.2009, 13:59   #2
SynEnergizer
Пользователь
 
Регистрация: 14.07.2009
Сообщений: 51
По умолчанию

А разве код работает?
SynEnergizer вне форума Ответить с цитированием
Старый 17.07.2009, 14:50   #3
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

Цитата:
Сообщение от paladinn Посмотреть сообщение
парни объясните как это работает)
пока никак, функции main нет
A_r_r_a_y вне форума Ответить с цитированием
Старый 18.07.2009, 01:48   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Откомментировал код) Правда местами не уверен за правильность комментариев, пусть меня поправит кто-то, но суть уловить должны)

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

struct Telem
{
	int inf;        //INFORM ELEMENT
	Telem *link;    // указатель на следующий элемент
} *begL, *endL;     // объявляем два указателя на переменные типа Telem
                    // (begL - указатель на начало списка, endL - на конец)
//=================================== =============================
// функция добавления элемента в начало списка 
void addElemAToBeginList()
{
	Telem *p = new Telem;                  // Выделяем память под новый элемент и сохраняем указатель на него в p
	printf("Vvedite noviy element: ");
	scanf("%d", &p -> inf);
	if(begL == NULL) {                     // Проверяем существует ли список
		endL = p;                          // Если нет, то этот элемент является первым и последним(если я правильно понял :) )
	}
	p -> link = begL;                      // Сохраняем указатель на начало списка в новом элементе
	begL = p;                              // Присваиваем begL адрес нового элемента, таким образом он становится первым в списке.
	printf("\n");
}
//=================================== =============================
// Функция добавления элемента в конец списка
void addElemToEndList()
{
	Telem *p = new Telem;                  // Выделяем память под новый элемент и сохраняем указатель на него в p
	printf("Vvedite noviy element: ");     
	scanf("%d", &p -> inf);
	if(begL == NULL) {                     // Проверяем существует ли список
		begL = p;                          // Если нет, то этот элемент является единственным и должен быть началом списка
	}
	else {
		endL -> link = p;                  // Если да, то добавляем в последний элемент указатель на новый элемент. Таким образом новый элемент становиться последним
	}
	p -> link = NULL;                      // Поставим терминатор(0) в конце списка
	endL = p;                              // Сохраняем указатель на новый(последний) элемент в endL
	printf("\n");
}

// Функция для удаления элемента из начала списка
void deleteElemFromBeginList()
{
	Telem *p = begL;                      // Создаём временную переменную для хранения указателя на первый элемент списка
	if(p == NULL) {                       // Если список не существует - выведем соответсвующее предупреждение.
		printf("Spisok pust. Udalenie nevozmozhno!");
		printf("\n\n");
	}
	else {
		begL = p -> link;                 // В ином случае присвоим begL указатель на следующий элемент списка
		delete p;                         // и удалим первый элемент списка
	}
}
//=================================== =============================
// Функция для удаления элемент из конца списка
void deleteElemFromEndList()
{
	Telem *p = begL;                      // Скопируем указатель на начало списка в p
	if(p == NULL) {                       // Если список не существует сообщить об этом
		printf("Spisok pust. Udalenie nevozmozhno!");
		printf("\n\n");
	}
	else {                                // В ином случае
		while((p -> link != endL) && (p -> link != NULL)) {
			p = p -> link;                // Пройтись по списку от начала, до предпоследнего элемента
		}
		if(begL == endL) {                // Вот это сам немного не понял... Если указатель на начало списка равен указателю на конец списка
			begL = begL -> link;          // То сдвинуть начало списка на одну позицию
			endL = NULL;                  // и присвоить концу списка нуль...
			delete p;                     // После чего удалить первый/последний элемент. Или как-то так %)
		}
		else {                            // Иначе
			endL = p;                     // endL присваиваем указатель на предпоследний элемент, так что он становится последним
			delete p -> link;             // И удаляем последний(старый)
			endL -> link = NULL;          // Ставим терминатор(0) 
		}
	}
}
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как это сграбить? T_o_l_i_k Работа с сетью в Delphi 4 14.02.2009 23:03
Гиперссылка это как ?? SanSanblch Общие вопросы Delphi 11 14.01.2009 20:30
Помогите разобраться как это работает! Пожалуйста Romens Паскаль, Turbo Pascal, PascalABC.NET 1 08.12.2008 22:16
как это сделать? DeDoK Общие вопросы Delphi 2 11.07.2008 04:41