#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef int data_t;
typedef struct LNode {
data_t data;
struct LNode *next;
}LNode, *CriList;
CriList CreateCriList(void)
{
CriList L = (CriList)malloc(sizeof(LNode));
if(NULL == L)
{
return NULL;
}
L->next = L;
return L;
}
void ClearCriList(CriList L)
{
CriList p;
while(L->next != L)
{
p = L->next;
L->next = p->next;
free(p);
}
p = NULL;
}
int LengthCriList(CriList L)
{
int count = 0;
CriList p = L->next;
while(p != L)
{
count ++;
p = p->next;
}
return count;
}
int IsEmpty(CriList L)
{
CriList p = L->next;
while(p != L)
{
return FALSE;
}
return TRUE;
}
CriList LocateCriList(CriList L, data_t x)
{
CriList p = L->next;
while(p != L)
{
if(p->data == x)
{
return p;
}
p = p->next;
}
return NULL;
}
CriList FindCriList(CriList L, int i)
{
if(i<1 || i>LengthCriList(L))
{
return FALSE;
}
CriList p = L->next;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
return p;
}
int InsertCriList(CriList L, data_t x, int i)
{
if(i<1 || i>(LengthCriList(L)+1))
{
return FALSE;
}
CriList p = L;
int j;
for(j = 1; j < i; j++)
{
p = p->next;
}
CriList Q = (CriList)malloc(sizeof(LNode));
if(Q != NULL)
{
Q->data = x;
Q->next = NULL;
}
if(1 == i)
{
Q->next = L->next;
L->next = Q;
}
else
{
Q->next = p->next;
p->next = Q;
}
return TRUE;
}
int DelCriList(CriList L, int i)
{
if(i<1 || i>LengthCriList(L))
{
return FALSE;
}
CriList p = L;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
CriList q = p->next;
p->next = q->next;
free(q);
q = NULL;
}
void DesplayCriList(CriList L)
{
CriList p = L->next;
while(p != L)
{
printf("%-d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
CriList L = CreateCriList();
int i;
for(i = 1; i <=5; i ++)
{
InsertCriList(L, i, i);
}
DesplayCriList(L);
printf("length: %d\n", LengthCriList(L));
printf("isempty: %d\n", IsEmpty(L));
printf("find 3: %p\n", FindCriList(L, 3));
printf("LocateCriList 3: %p\n", LocateCriList(L, 3));
ClearCriList(L);
DesplayCriList(L);
printf("isempty2: %d\n", IsEmpty(L));
printf("length: %d\n", LengthCriList(L));
return 0;
}
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef int data_t;
typedef struct LNode {
data_t data;
struct LNode *next;
}LNode, *CriList;
CriList CreateCriList(void)
{
CriList L = (CriList)malloc(sizeof(LNode));
if(NULL == L)
{
return NULL;
}
L->next = L;
return L;
}
void ClearCriList(CriList L)
{
CriList p;
while(L->next != L)
{
p = L->next;
L->next = p->next;
free(p);
}
p = NULL;
}
int LengthCriList(CriList L)
{
int count = 0;
CriList p = L->next;
while(p != L)
{
count ++;
p = p->next;
}
return count;
}
int IsEmpty(CriList L)
{
CriList p = L->next;
while(p != L)
{
return FALSE;
}
return TRUE;
}
CriList LocateCriList(CriList L, data_t x)
{
CriList p = L->next;
while(p != L)
{
if(p->data == x)
{
return p;
}
p = p->next;
}
return NULL;
}
CriList FindCriList(CriList L, int i)
{
if(i<1 || i>LengthCriList(L))
{
return FALSE;
}
CriList p = L->next;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
return p;
}
int InsertCriList(CriList L, data_t x, int i)
{
if(i<1 || i>(LengthCriList(L)+1))
{
return FALSE;
}
CriList p = L;
int j;
for(j = 1; j < i; j++)
{
p = p->next;
}
CriList Q = (CriList)malloc(sizeof(LNode));
if(Q != NULL)
{
Q->data = x;
Q->next = NULL;
}
if(1 == i)
{
Q->next = L->next;
L->next = Q;
}
else
{
Q->next = p->next;
p->next = Q;
}
return TRUE;
}
int DelCriList(CriList L, int i)
{
if(i<1 || i>LengthCriList(L))
{
return FALSE;
}
CriList p = L;
int j;
for(j = 1; j < i; j ++)
{
p = p->next;
}
CriList q = p->next;
p->next = q->next;
free(q);
q = NULL;
}
void DesplayCriList(CriList L)
{
CriList p = L->next;
while(p != L)
{
printf("%-d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
CriList L = CreateCriList();
int i;
for(i = 1; i <=5; i ++)
{
InsertCriList(L, i, i);
}
DesplayCriList(L);
printf("length: %d\n", LengthCriList(L));
printf("isempty: %d\n", IsEmpty(L));
printf("find 3: %p\n", FindCriList(L, 3));
printf("LocateCriList 3: %p\n", LocateCriList(L, 3));
ClearCriList(L);
DesplayCriList(L);
printf("isempty2: %d\n", IsEmpty(L));
printf("length: %d\n", LengthCriList(L));
return 0;
}