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);
}
Модуль ДЛС, расположенного в динамической памяти: