pkkirill
17-03-2013, 07:52
что-то в функции LSQ_InsertFrontElement неправильно сделано
http://content.foto.mail.ru/mail/pk.kirill/_answers/i-138.jpg
вот фаилы:
.c http://yadi.sk/d/SMXZ5cLR3JVRr
.h http://yadi.sk/d/Go_5SIwB3IKuM
или ниже код:
//___________________________________
#ifndef LINEAR_SEQUENCE_H_INCLUDED
#define LINEAR_SEQUENCE_H_INCLUDED
#include <stdlib.h>
typedef int LSQ_BaseTypeT; /* Тип хранимых в контейнере значений */
typedef void* LSQ_HandleT; /* Дескриптор контейнера */
#define LSQ_HandleInvalid NULL /* Неинициализированное значение дескриптора контейнера */
typedef void* LSQ_IteratorT; /* Дескриптор итератора */
typedef int LSQ_IntegerIndexT; /* Тип целочисленного индекса контейнера */
/* Функция, создающая пустой контейнер. Возвращает назначенный ему дескриптор */
extern LSQ_HandleT LSQ_CreateSequence(void);
/* Функция, добавляющая элемент в начало контейнера */
extern void LSQ_InsertFrontElement(LSQ_HandleT handle, LSQ_BaseTypeT element);
#endif
//______________________________________________________________________________
//______________________________________________________________________________
typedef struct LSQ_HandleT //контейнер
{
//LSQ_BaseTypeT *ptr; //Тип хранимых в контейнере значений
LSQ_IntegerIndexT size; //Кол-во элементов //Тип целочисленного индекса контейнера
struct LSQ_Element *HeadElement;//указатель на первый элемент контейнера (вместо void - LSQ_Element)
struct LSQ_Element *TailElement;//указатель на последний элемент контейнера (вместо void - LSQ_Element)
};
typedef struct LSQ_Iterator
{
struct LSQ_Element *CurrentElement;//указатель на текущий эл-т
struct LSQ_HandleT *Container; //указатель на контейнер
};
typedef struct LSQ_Element
{
struct LSQ_Element *PrewElement; //указатели на пред. и след. элемент контейнера
struct LSQ_Element *NextElement;
LSQ_BaseTypeT Data;
LSQ_IntegerIndexT Index; //номер элемента
};
//______________________________________________________________________________
LSQ_HandleT LSQ_CreateSequence() //создать контейнер
{ // Потом все функции надо в отдельный фаил переместить [C++ Warning] linear_sequence.h(100): W8058 Cannot create pre-compiled header: code in header
struct LSQ_HandleT* handle = (struct LSQ_HandleT*)malloc(sizeof(struct LSQ_HandleT));
(*handle).size = 0;
(*handle).HeadElement = NULL;
(*handle).TailElement = NULL;
return (LSQ_HandleT)handle;
}
void LSQ_InsertFrontElement(LSQ_HandleT handle, LSQ_BaseTypeT element) /* Функция, добавляющая элемент в начало контейнера */
{
struct LSQ_Element* ElementHandle = (struct LSQ_Element*)malloc(sizeof(struct LSQ_Element));
struct LSQ_HandleT* con = handle; //делаем типизированный указатель
(*ElementHandle).Data = element;
(*con).size++; //raised exception class EAccesViolation
//(*handle).size++;
//(*(LSQ_Container *)handle).size++;
//((LSQ_Container *)handle)->size++;
if (((*con).size) == 1)
{
(*con).TailElement = ElementHandle;
(*ElementHandle).NextElement = NULL;
}else{
(*ElementHandle).NextElement = (*con).HeadElement;
(*con).HeadElement->PrewElement = ElementHandle;
}
(*ElementHandle).PrewElement = NULL;
(*con).HeadElement = ElementHandle;
}
http://content.foto.mail.ru/mail/pk.kirill/_answers/i-138.jpg
вот фаилы:
.c http://yadi.sk/d/SMXZ5cLR3JVRr
.h http://yadi.sk/d/Go_5SIwB3IKuM
или ниже код:
//___________________________________
#ifndef LINEAR_SEQUENCE_H_INCLUDED
#define LINEAR_SEQUENCE_H_INCLUDED
#include <stdlib.h>
typedef int LSQ_BaseTypeT; /* Тип хранимых в контейнере значений */
typedef void* LSQ_HandleT; /* Дескриптор контейнера */
#define LSQ_HandleInvalid NULL /* Неинициализированное значение дескриптора контейнера */
typedef void* LSQ_IteratorT; /* Дескриптор итератора */
typedef int LSQ_IntegerIndexT; /* Тип целочисленного индекса контейнера */
/* Функция, создающая пустой контейнер. Возвращает назначенный ему дескриптор */
extern LSQ_HandleT LSQ_CreateSequence(void);
/* Функция, добавляющая элемент в начало контейнера */
extern void LSQ_InsertFrontElement(LSQ_HandleT handle, LSQ_BaseTypeT element);
#endif
//______________________________________________________________________________
//______________________________________________________________________________
typedef struct LSQ_HandleT //контейнер
{
//LSQ_BaseTypeT *ptr; //Тип хранимых в контейнере значений
LSQ_IntegerIndexT size; //Кол-во элементов //Тип целочисленного индекса контейнера
struct LSQ_Element *HeadElement;//указатель на первый элемент контейнера (вместо void - LSQ_Element)
struct LSQ_Element *TailElement;//указатель на последний элемент контейнера (вместо void - LSQ_Element)
};
typedef struct LSQ_Iterator
{
struct LSQ_Element *CurrentElement;//указатель на текущий эл-т
struct LSQ_HandleT *Container; //указатель на контейнер
};
typedef struct LSQ_Element
{
struct LSQ_Element *PrewElement; //указатели на пред. и след. элемент контейнера
struct LSQ_Element *NextElement;
LSQ_BaseTypeT Data;
LSQ_IntegerIndexT Index; //номер элемента
};
//______________________________________________________________________________
LSQ_HandleT LSQ_CreateSequence() //создать контейнер
{ // Потом все функции надо в отдельный фаил переместить [C++ Warning] linear_sequence.h(100): W8058 Cannot create pre-compiled header: code in header
struct LSQ_HandleT* handle = (struct LSQ_HandleT*)malloc(sizeof(struct LSQ_HandleT));
(*handle).size = 0;
(*handle).HeadElement = NULL;
(*handle).TailElement = NULL;
return (LSQ_HandleT)handle;
}
void LSQ_InsertFrontElement(LSQ_HandleT handle, LSQ_BaseTypeT element) /* Функция, добавляющая элемент в начало контейнера */
{
struct LSQ_Element* ElementHandle = (struct LSQ_Element*)malloc(sizeof(struct LSQ_Element));
struct LSQ_HandleT* con = handle; //делаем типизированный указатель
(*ElementHandle).Data = element;
(*con).size++; //raised exception class EAccesViolation
//(*handle).size++;
//(*(LSQ_Container *)handle).size++;
//((LSQ_Container *)handle)->size++;
if (((*con).size) == 1)
{
(*con).TailElement = ElementHandle;
(*ElementHandle).NextElement = NULL;
}else{
(*ElementHandle).NextElement = (*con).HeadElement;
(*con).HeadElement->PrewElement = ElementHandle;
}
(*ElementHandle).PrewElement = NULL;
(*con).HeadElement = ElementHandle;
}