Форум программистов, компьютерный форум CyberForum.ru

списки и динамическое выделение памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вопрос по классам http://www.cyberforum.ru/cpp-beginners/thread12108.html
Есть такой код #include <iostream> class C1{ public: C1(){std::cout <<" 1 is open"<<std::endl;}; ~C1(){std::cout <<" 1 is close"<<std::endl;}; }; class C2{ public:
C++ Как создать папку (а не файл) в VS2003? как создать паку (а не файл) в с++? файл я создаю так - ofstream input_file("file.txt") ; а файл в уже существующей папке так ofstream input_file("folder/file.txt") ; http://www.cyberforum.ru/cpp-beginners/thread12105.html
C++ Найти угол между пересекающимися прямыми на плоскости
Суть заключается вот в чём Заданы уравнения пересекающихся прямых на плоскости Y=k1x+b1 и y=k2x+b2 найти угол в градусах и минутах между нимииспользую формулу tg=(k2-k1)/(1+k2*k1)
Крестики-нолики C++
Здраствуйте,помогите пожалуйсто с програмкои крестики нолики проблема не могу в вести символы. Вот собственно сам код рамки . #include<iostream> #include<time.h> usingnamespace std; void ramka(int vis,int shir)//a-visota,b-shirina { int kletka=3;
C++ Как создать класс, который содержит элементы другого класса http://www.cyberforum.ru/cpp-beginners/thread11999.html
Добрый день, я чисто любитель, начала сама потихоньку разбираться в с++, благополучно дошла до классов и сделала класс konto (банковский счет). Теперь я хочу сделать класс банк, в котором будут функции ДобавитьНовыйСчет, ДобавитьДенегНаУказанныйСчет, РаспечататьИнфуПоВсемСчетам и НайтиСчетПоНомеру. Но я не знаю как вообще сделать класс, который содержит элементы другого класса, читала про arrays...
C++ помогите пожалуйста в работе с ZIP архивами очень нужно автоматизировать распаковку zip-архива:wall: подробнее

Показать сообщение отдельно
Vasilio
Сообщений: n/a

списки и динамическое выделение памяти - C++

04.09.2008, 11:06. Просмотров 3112. Ответов 6
Метки (Все метки)

Помогите разобраться в примере.
Вместо нормального вывода на экран выводится всякий мусор либо
вобще вылетает из компилятора. Использую Borland C++ 3.1
Код
#include <stdio.h>
#include <alloc.h>
#include <string.h>
#include <stdlib.h>
//////////////////////////////////
// описание элемента списка    //
//////////////////////////////////
typedef struct ListElTag {
  struct ListElTag *left;  //связь влево
  struct ListElTag *right; //связь вправо
  char *name;              //хранимый указатель на данные
} LISTEL;
///////////////////////////////////
// описание очереди    ///
///////////////////////////////////
typedef struct ListTag {
  LISTEL *head;    //указатель на голову
  LISTEL *tail;    //указатель на хвост
  int size;     //количество элементов в очереди
} LIST;
//////////////////////////////////////
// инициализация очереди    //
//////////////////////////////////////
void InitList(LIST *list)
{
  printf("инициализация списка\n");
  list->head=list->tail=NULL;
  list->size=0;
}
//////////////////////////////////////
void AddList(LIST *list,char *name)
{
  int len=strlen(name);
  //выделение памяти под новый элемент
  LISTEL *listel=(LISTEL *)malloc(sizeof(listel));
  if (listel==NULL) return;
  listel->name=(char *)malloc(len+1);    //выделение памяти под строку
  if (listel->name==NULL) return;
  strcpy(listel->name,name); //копировать строку
  listel->left=NULL;
  listel->right=NULL;
  printf("добавление элемента\n");
  //организация связи
  if(list->head==NULL) //список пуст
  {
    list->head=list->tail=listel;
  }
  else //добавление элемента в конец очереди
  {
    list->tail->left=listel;
    listel->right=list->tail;
    list->tail=listel;
  }
  free(listel->name);
  free(listel);
  listel->name=NULL;
  listel=NULL;
  list->size++;
}

///////////////////////////////////////////
// Вывод всех элементов списка    ///
///////////////////////////////////////////
OutList(LIST *list)
{
  LISTEL *ptr;
  printf("вывод списка\n");
  for (ptr=list->head; ptr!=NULL; ptr=ptr->left)
  printf("%s\n",ptr->name);
}
///////////////////////////////////////////
// удаление всех элементов списка        // ///////////////////////////////////////////
void DeleteAll(LIST *list)
{
  LISTEL *ptr, *tmp;
  printf("удаление очереди\n");
  for (ptr=list->head; ptr!=NULL;)
  {
    tmp=ptr->left;
    //free(ptr->name);
    //free(ptr);
    ptr=tmp;
    list->size--;
  }
}
///////////////////////////////////////////
// нахождение заданного имени в списке   //
///////////////////////////////////////////
LISTEL* FindName(LIST *list, char *name)
{
  LISTEL *ptr;
  printf("поиск имени\n"); 
  for (ptr=list->head;ptr!=NULL;ptr=ptr->left)
  if (strcmp(name,ptr->name)==0) return ptr; 
  return NULL;
}
///////////////////////////////////////////
// удаление заданного имени из списка    //
///////////////////////////////////////////
int DeleteName(LIST *list, char *name)
{
  LISTEL *ptr;
  printf("удаление имени %s\n",name);
  //указанное имя не найдено
  if((ptr=FindName(list,name))==NULL) return 0;
  //удаление единственного элемента
  if(ptr==list->head&&ptr==list->tail) 
  {
    list->head=list->tail=NULL;
  }
  else
    if(ptr==list->tail) //удаление  хвоста
    {
      list->tail=list->tail->right;
      list->tail->left=NULL;
    }
    else
      if(ptr==list->head) //удаление головы
      {
    list->head=list->head->left;
    list->head->right=NULL;
      }
      else //удаление из середины
      {
    (ptr->left)->right=ptr->right;
    (ptr->right)->left=ptr->left;
      }
  free(ptr->name);
  free(ptr);
  list->size--;
}
//////////////////////////////////////////////////
// построение списка слов из строки символов    //
//////////////////////////////////////////////////
void MakeListWord(char *exp,LIST *list)
{
  char *begword, *word=NULL;
  int len;
  int i;
  while(1)
  {

  while(*exp==' ') exp++;

  begword=exp;
  len=0;
  while(*exp)    //определение длины слова
  {
    if (*exp!=' ')
    {
      len++;
      exp++;
    }
    else break;
  }
  if (len==0) return;
  //выделение слова
  word=(char *) malloc(len+1);
  if (!word) printf("Ашипка");
  for (i=0; i<len; i++) word[i]=begword[i];
  word[len]='\0';
  //запись слова в список
  AddList(list,word);
  free(word);
  word=NULL;
  }
}
///////////////////////////////////////////////////
void main()
{
  LIST list;
  InitList(&list);
  AddList(&list,"Петя");
  AddList(&list,"Миша");
  OutList(&list);
  DeleteName(&list,"Миша");
  OutList(&list);
  DeleteAll(&list);
  InitList(&list);
  MakeListWord("Привет Всем Вам !!!",&list);
  OutList(&list);
  DeleteAll(&list);
  OutList(&list);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru