#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define Elemtype int
typedef int Status;
typedef struct LNode {
Elemtype data;
struct LNode *next;
}LNode, *LinkList;
//No.1 Init list
LinkList InitList()
{
LinkList L = NULL;
L = (LinkList)malloc(sizeof(LNode));
if (!L)
{
printf("***** Init Link list failed ! **** \n");
exit(OVERFLOW);
}
L->next = NULL;
printf("Init Link list ...\n");
return L;
}
//No.2 Destroy List
void DestoryList(LinkList L)
{
LinkList p = L;
if (p == NULL)
{
free(p);
}
while (p)
{
L = p->next;
free(p);
p = L;
}
}
// No.3 ClearList
void ClearList(LinkList L)
{
LinkList p = L;
if (p == NULL)
{
printf("List is NULL, clear list done !\n");
exit(-1);
}
while ( p->next != NULL)
{
p = L->next;
free(L);
L = p;
}
printf("clear list done !\n");
}
//No.4 List empty
Status ListEmpty(LinkList L)
{
LinkList p = L->next;
if ( p == NULL)
{
printf("Link is empty !\n");
return FALSE;
}
else
{
return TRUE;
printf("Link is not empty !\n");
}
}
//No.5 List length, include Head number
int ListLength(LinkList L)
{
int i = 0;
LinkList p =L;
if ( p == NULL)
{
printf("Link is empty !\n");
return FALSE;
}
while (p != NULL)
{
p = p->next;
++i;
}
return i;
}
//No.6 GetElem
Status GetElem_L(LinkList L, int i, Elemtype *e)
{
int j=1;
LinkList p = NULL;
p = L->next;
if (p && j < i)
{
p =p->next;
j++;
}
if (!p->next || j > i)
return ERROR;
*e = p->next->data;
printf("node %d value : %d\n",i,*e);
return OK;
}
//No.7 LocateElem
int LocateElem(LinkList L, Elemtype e)
{
LinkList p;
int i = 1;
p = L->next;
while ( p != NULL && p->data != e)
{
p = p->next;
++i;
}
if (p)
{
printf("system has found %d in %d node !\n",e,i);
return i;
}
else
{
printf("%d is not in Link List !\n", e);
return 0;
}
}
//No.8 PriorElem
int PriorElem(LinkList L, Elemtype current_value, Elemtype *prior_value)
{
LinkList p,q;
p = L->next;
q = p;
if (p ==NULL)
{
printf("link list is empty, no Prior !\n");
exit(-1);
}
while ( p != NULL && p->next->data != current_value)
{
p = p->next;
}
if (p->next->data == current_value)
{
*prior_value = p->data;
printf("prior node value = %d\n",*prior_value);
}
return OK;
}
Status ListInsert_L(LinkList L, int i, Elemtype e)
{
int j = 1;
LinkList q = (LinkList) malloc(sizeof(LNode));
if ( !q )
{
printf("system can not malloc memory !\n");
return (OVERFLOW);
}
LinkList p = NULL;
p = L->next;
if (p && j < i-1)
{
p =p->next;
j++;
}
if (!p->next || j > i-1)
return