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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2008, 22:02   #1
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
Вопрос безразмерный одномерный массив

Подскажите как реализовать безразмерный одномерный массив в Turbo C?т.е. размер массива менялся в зависимости от введенной в него инфы.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 20.02.2008, 04:13   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Принцип примерно такой:

Код:
#include <stdlib.h>
#include <mem.h>

typedef struct _DYNVECTOR{
	unsigned long	nCount;
	long*			pVect;
}DYNVECTOR, *PDYNVECTOR;

// Инициализация массива
long InitDynVect(PDYNVECTOR pVector)
{
	pVector->pVect = NULL;
	pVector->nCount = 0;
        return 1;
}

// Удаление массива
long DropDynVect(PDYNVECTOR pVector)
{
	if(pVector->pVect) free(pVector->pVect);
	pVector->nCount = 0;
	return 1;
}

//Вставка нового элемента в позицию idx
long InsertElement(long nNewElement, unsigned long idx, PDYNVECTOR pVector)
{
	unsigned long iInsIdx = idx;
	if(iInsIdx > pVector->nCount) iInsIdx = pVector->nCount;
	pVector->pVect = (long*)realloc(pVector->pVect, (pVector->nCount + 1) * sizeof(long));
	pVector->nCount ++;
	if(iInsIdx < pVector->nCount - 1){
		memmove(
			(void*)pVector->pVect[iInsIdx + 1],
			(void*)pVector->pVect[iInsIdx], 
			sizeof(long) * (pVector->nCount - iInsIdx - 1));
	}
	pVector->pVect[iInsIdx] = nNewElement;
	return 1;
}

// Добавление элемента
long AddElement(long nNewElement, PDYNVECTOR pVector)
{
	return InsertElement(nNewElement, pVector->nCount, pVector);
}

// Удаление элемента
long DeleteElement(unsigned long idx, PDYNVECTOR pVector)
{
	if(idx >= pVector->nCount) return 0;
	if(!pVector->nCount) return 0;
	if(idx < pVector->nCount - 1){
		memmove(
			(void*)pVector->pVect[idx],
			(void*)pVector->pVect[idx + 1],
			sizeof(long) * (pVector->nCount - idx - 1));
	}
	pVector->nCount --;
	pVector->pVect = (long*)realloc(pVector->pVect, (pVector->nCount) * sizeof(long));
	return 1;	
}

// Взять значение элемента в позиции idx
long GetElement(unsigned long idx, PDYNVECTOR pVector)
{
	if(idx < pVector->nCount) return pVector->pVect[idx];
	else return 0;
}

// Установить значение элемента в позиции idx
long SetElement(long nNewValue, unsigned long idx, PDYNVECTOR pVector)
{
	long nOld;
	if(idx < pVector->nCount) {
		nOld = pVector->pVect[idx];
		pVector->pVect[idx] = nNewValue;
		return nOld;
	}
	else return 0;
}
Проверьте, я писал "на ходу" и мог где-нибудь намудрить. Ну и кое-какие проверки нужно добавить.
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одномерный массив ldx Паскаль, Turbo Pascal, PascalABC.NET 4 06.06.2008 17:45
VBA. Одномерный массив ExMatiss Microsoft Office Excel 9 07.05.2008 05:57
одномерный массив fatdog Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 23.02.2008 10:05
Массив Одномерный flait111 Помощь студентам 3 15.12.2007 14:08
Одномерный массив SkyDreamer Помощь студентам 1 01.12.2007 21:22