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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 11:27   #1
-=Andriushka=-
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 91
По умолчанию список

пишу списки на visual studio 2008
от части работает!но надо доделать этот список чтобы можно было удалять,добавлять,перемещать элементы во время выполнения программы...подскажите как это сделать!
в заголовочном файле list.h вот так:
Код:
#define LIST struct list
LIST
{
	char aLastName[16];
	char aFirstName[16];
	char aTelephoneNumber[16];
	LIST *pNext;
};
extern void insert(LIST **ppList,LIST *pItem);//внешняя функция,невозвращает результат,доступна всем модулям;
extern void destroy(LIST **pList);//уничтожить список;
extern void display(LIST *pList);//вывод списка на экран;
extern int remove(LIST **ppList,LIST *pItem);//удалить элемент;
в списки.срр вот так:
Код:
// списки.cpp: определяет точку входа для консольного приложения.
//List_s.cpp:определяет точку входа для консольного приложения.
//основная программа.

#include "stdafx.h"
#include"list.h"
#include <string.h>
#include <malloc.h>
#include <stdio.h>
#include <conio.h>

//Статическая функция создания элемента списка
static LIST* create(LIST *pItem)
{
	LIST *pNewItem=(LIST*)malloc(sizeof(LIST));
	*pNewItem=*pItem;
	return pNewItem;
}
void insert(LIST **ppList,LIST *pItem)
{
	char aKey[16];
	LIST *pNewItem;
	LIST *pCurItem=*ppList;
	LIST *pPreItem=0;
	//В качестве ключевого поля в списке используется фамилия.
	strcpy_s(aKey,pItem->aLastName);
	//Ищем элемент совпадающий с ключевым
	while(pCurItem!=0 && strcmp(pCurItem->aLastName,aKey)<0)
	{
		pPreItem=pCurItem;
		pCurItem=pCurItem->pNext;
	}
	//Здесь pCurItem либо 0, либо равен указателю на найденный элемент.
	//Создаём новый элемент и заполняем его поля.
	pNewItem=create(pItem);
	pNewItem->pNext=pCurItem;
	//Вставляем новый элемент в список
	if(pPreItem==0)
		//либо в начало,
		*ppList=pNewItem;
	else
		//либо после ключевого.
		pPreItem->pNext=pNewItem;
}
int remove(LIST **ppList,LIST *pItem)
{
	LIST *pCurItem=*ppList;
	LIST *pPreItem=0;
	//Ищем заданный элемент.
	while(pCurItem!=0 && strcmp(pCurItem->aLastName,pItem->aLastName)==0)
	{
		pPreItem=pCurItem;
		pCurItem=pCurItem->pNext;
	}
	//Если такого элемента нет, то и удалять нечего.
	if(pCurItem==0)
		return 0;
	if(pPreItem==0)
		//Удалаяем первый элемент списка.
		*ppList=pCurItem->pNext;
	else
		//Удаляем элемент списка, начиная со второго.
		pPreItem->pNext=pCurItem->pNext;
	free(pCurItem); //Обязательно освобождаем память.
	return 1;
}
void destroy(LIST **ppList)
{
	LIST *pCurItem=*ppList;
	LIST *pPreItem=0;
	//Проходим весь список
	while(pCurItem!=0)
	{
		pPreItem=pCurItem;
		pCurItem=pCurItem->pNext;
		//и удаляем каждый текущий элемент
		free(pPreItem);
	}
	//Нулевой указатель на начало списка говорит, что список пустой.
	*ppList=0;
}
void display(LIST *pList)
{
	LIST *pCurItem=pList;
	//Последовательно проходим весь список
	while(pCurItem)
	{
		//и выводим информацию о каждом элементе
		printf("\n%s,%s", pCurItem->aLastName, pCurItem->aFirstName);
		printf("\t%s", pCurItem->aTelephoneNumber);
		pCurItem=pCurItem->pNext;
	}
	printf("\n\n");
}
LIST *pMyList;


int _tmain(int argc, _TCHAR* argv[])
{
LIST *pItem=(LIST*)malloc(sizeof(LIST));
	//подготавливаем данные;
	strcpy(pItem->aLastName,"Unitazov");
	strcpy(pItem->aFirstName,"Sortir");
	strcpy(pItem->aTelephoneNumber,"00-00-00");
	insert(&pMyList,pItem);//вставляем данные;
	//подготавливаем данные;
	strcpy(pItem->aLastName,"Sidorov");
	strcpy(pItem->aFirstName,"Sidor");
	strcpy(pItem->aTelephoneNumber,"01-01-01");
	insert(&pMyList,pItem);//вставляем данные;
	//подготавливаем данные;
	strcpy(pItem->aLastName,"Petrov");
	strcpy(pItem->aFirstName,"Petr");
	strcpy(pItem->aTelephoneNumber,"02-02-02");
	insert(&pMyList,pItem);//вставляем данные;
	//подготавливаем данные;
	strcpy(pItem->aLastName,"Ivanov");
	strcpy(pItem->aFirstName,"Ivan");
	strcpy(pItem->aTelephoneNumber,"03-03-03");
	insert(&pMyList,pItem);//вставляем данные;
	//распечатываем содержимое списка;
	display(pMyList);
	//удаляем элемент;
	remove(&pMyList,pItem);
	remove(&pMyList,pItem);
	//распечатываем содержимое списка;
	display(pMyList);
	//разрушаем весь список;
	destroy(&pMyList);
	_getch();
}
как я пойму всё то что мне надо уже обьявлено...но вот проблема,как сделать чтобы это выполнялось...подскажите пожалуйста...а то я еще плохо в програмировании понимаю!!=(((

Последний раз редактировалось -=Andriushka=-; 08.03.2011 в 12:46.
-=Andriushka=- вне форума Ответить с цитированием
Старый 08.03.2011, 12:52   #2
-=Andriushka=-
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 91
По умолчанию

как тут сделать чтоб я сам в окне после кампиляции мог ввести еще одну фамилию имя телефон....или удалить какуюнибудь?
-=Andriushka=- вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29
связать список строк и список целых чисел lirikoff Помощь студентам 5 31.08.2010 13:23
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43