Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
rgz_asd.docx
Скачиваний:
12
Добавлен:
11.03.2015
Размер:
54.12 Кб
Скачать

List .H

#if !defined(LIST. H)

const ListOk = 0;

const ListNotMem =1 ;

const ListUnder = 2;

const ListEnd  = 3;

typedef int *BaseType;

typedef  struct element *ptrel;

typedef   struct element {basetype data;

ptr link;};

typedef  struct  List {ptrel Start;

ptrel ptr;

unsigned int N}

extern short ListError;

void InitList(List *L);

void PutList(List *L, BaseType E);

void GetList(List *L, BaseType *E);

int FullList(List *L);

void BeginPtr(List *L);

void EndPtr(List *L);

void MovePtr(List *L);

void DoneList(List *L);

#endif

List . C

#include <stdio.h>

#include “List.h”

short ListError;

void InitList(List *L);

L->start = (ptrEl) malloc(sizeof(element));

if (!L->start) {

listError = ListNotMem;

return;

}

L->ptr = L->start;

L->ptr->link = NULL;

}

void PutList(List *L, BaseType E);

// Выделение памяти под новый элемент

ptrel temp = (ptrel) malloc(sizeof(element));

if (temp==NULL) {

listError = ListNotMem;

return;

}

temp->data = E;

temp->link = L->ptr->link;

L->ptr->link = temp;

}

void GetList(List *L, BaseType *E);

{

if (FullList(L))

{

return;

}

/* рабочий указатель указывает на последний элемент*/

if ((L->ptr!=L->start)&&(!L->ptr->link))

{

listError = ListEnd;

return;

}

ptrel pntr = L->ptr->link;

L->ptr->link = pntr->link;

*E = pntr->data;

pntr->link = NULL;

free((void *) pntr);

}

int FullList(List *L);

{

if ((L->ptr!=L->start)&&(!L->ptr->link))

{

listError = ListUnder;

return 1;

}

return 0;

}

void MovePtr(List *L);

{

/* рабочий указатель указывает на последний элемент*/

if ((L->ptr!=L->start)&&(!L->ptr->link))

{

listError = ListEnd;

return;

}

L->ptr = L->ptr->link;

}

void BeginPtr(List *L);

{

L->ptr = L->start;

}

void EndPtr(List *L);

{

while (L->ptr->link)

{

movePtr (L);

}

}

int EmptyList(List *L)

{

    if (L->start->next==NULL) {

          ListError = ListEmpty;

         return 1;

      }

    return 0;

}

int EndList(List *L)

{

if (L->ptr->next==NULL && L->ptr!=L->start) {

          ListError = ListEnd;

          return 1;

     }

    return 0;

}

void DoneList(List *L);

{

BeginPtr (L);

ListBaseType temp;

while (!FullList(L)) {

GetList(L, &temp);

}

free((void *) L->ptr);

}

Модуль ДЛС, расположенного в динамической памяти:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]