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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2010, 21:11   #1
Aндрей
Пользователь
 
Регистрация: 15.02.2009
Сообщений: 33
По умолчанию дек на основе динамического массива

Написал программу, правда вся реализация в функции main(). Все работает. Хочу перенести теперь все в отдельные функции. У меня получается в функции работа с двойным указателем, а с ними у меня сложновато. Вобщем, когда добавляю элементы, например в начало, последний добавленный элемент выводится нормально, а вместо остальных элементов ерунда. Посмотрите пожалуйста что не так. Пишу в среде BC31

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>
#define N 10

void AddToDeck(int **mas, int *kol, int value, int f)
{
  if (f==1)   //добавление в начало
  {
    printf("\n Enter value to add in deck: ");
    scanf("%d",&value);
    if ((*kol)==0)
		{
		  *mas=(int *)malloc( (*kol)*(sizeof(int)) );
			*(mas[0])=value;
			(*kol)++;
		}
		else
		{
			int *temp,i=0;
			temp=(int *) malloc( (*kol)*(sizeof(int)) );
			while(i<(*kol))
			{
				temp[i]=*(mas[i]);
				i++;
			}
			free(mas);
			++(*kol);
			*mas=(int *)malloc( (*kol)*(sizeof(int)) );
			i=1;
			while(i<(*kol))
			{
				*(mas[i])=temp[i-1];
				i++;
			}
			free(temp);
			*(mas[0])=value;
		}
	}

	if (f==2)   //добавление в конец
	{
		printf("\n Enter value to add in deck: ");
		scanf("%d",&value);
		if ((*kol)==0)
		{
			*mas=(int *)malloc( (*kol)*(sizeof(int)) );
			*(mas[0])=value;
			(*kol)++;
		}
		else
		{
			int *temp,i=0;
			temp=(int *)malloc( (*kol)*(sizeof(int)) );
			while(i<(*kol))
			{
				temp[i]=*(mas[i]);
				i++;
			}
			free(mas);
			++(*kol);
			*mas=(int *)malloc( (*kol)*(sizeof(int)) );
			i=0;
			while(i<(*kol)-1)
			{
				*(mas[i])=temp[i];
				i++;
			}
			free(temp);
			*(mas[((*kol)-1)])=value;
		}
	}
}

/*void PrintDeck(int *mas, int kol)
{
	int i=0;
	while(i<kol)
	{
		printf(" %d ", mas[i]);
		i++;
	}
} */

int main()
{ clrscr();
	int *mas, kol, choose, value;//, *startptr, *endptr, *endptr;
	kol=0;//start=0;//=end=0;

		for(;;)
		{
			printf("\n1.Dobavlenie elemena\n2.Delete n\n3.Vivod deck\n4.Exit\n:");
			scanf("%d",&choose);
			switch(choose)
			{
	case 1:
	{
		clrscr();
		int f;
		printf("\n 1.Dobavlenie elemena v nachalo\n 2.Dobavlenie elemena v konec\n:");
		scanf("%d",&f);
		AddToDeck(&mas,&kol,value,f);
    printf("\n kol = %d",kol);
		break;
	}
	case 2:
	{
		clrscr();
		int f;
		if (kol==0)
		{
			printf("\n Deck is empty!");
		}
		else
		{
		printf("\n 1.Delete elemen iz nachala\n 2.Delete elemen iz konca\n:");
		scanf("%d",&f);

		if (f==1)
		{
				int *temp,i=1;
				temp=(int *)malloc( (kol-1)*(sizeof(int)) );
				while(i<(kol))
				{
					temp[i-1]=mas[i];
					i++;
				}
				free(mas);
				--(kol);
				mas=(int *)malloc( (kol)*(sizeof(int)) );
				//mas=(int *)realloc( mas,(kol)*(sizeof(int)) );
				i=0;
				while(i<(kol))
				{
					mas[i]=temp[i];
					i++;
				}
				free(temp);

		}


		if (f==2)
		{
			int *temp,i=0;
				temp=(int *)malloc( (kol-1)*(sizeof(int)) );
				while(i<(kol-1))
				{
					temp[i]=mas[i];
					i++;
				}
				free(mas);
				--(kol);
				mas=(int *)malloc( (kol)*(sizeof(int)) );
				//mas=(int *)realloc( mas,(kol)*(sizeof(int)) );
				i=0;
				while(i<(kol))
				{
					mas[i]=temp[i];
					i++;
				}
				free(temp);
		}
		}
			break;
	}
	case 3:
	{
		if (kol==0)
		{
			printf("\n Deck is empty!");
		}
		else
		{
			int i=0;
			while(i<kol)
			{
				printf(" %d ", mas[i]);
				i++;
			}
		}

		//vivod_stack(mas,n,start);
		break;
	}
	case 4:return 0;
      }
    }

}

Последний раз редактировалось Aндрей; 29.10.2010 в 07:14.
Aндрей вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Содержание динамического массива Bish Microsoft Office Excel 6 18.05.2010 15:45
очистка динамического массива BattleMage Общие вопросы C/C++ 1 19.09.2009 09:03
Освобождение динамического массива? VintProg Общие вопросы Delphi 15 28.08.2009 10:41
Сохранение динамического массива Horus92 Помощь студентам 3 07.05.2009 12:36
Удаление динамического массива Сергей089 Общие вопросы C/C++ 3 08.03.2009 13:13