#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define TRUE 1
#define ERROR -1
#define FALSE -1
#define OVERFLOW -2
#define ElemType int
#define Status int
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
Status InitList_L(LinkList &L) {
L = (LinkList)malloc(sizeof(LNode));
L->next = Null;
return TRUE;
}
Status GetElem_L(LinkList L,int i,ElemType &e){
p = L->next; j = 1;
while (p && j<i) {
p = p->next; ++j;
}
if (!p || j>i) return FALSE;
e = p->data;
return TRUE;
}
Status ListInsert_L(LinkList &L, int i, ElemType e) {
p = L; j = 0;
while (p && j < i - 1) { p = p->next; ++j; }
if (!p || j>i) return FALSE;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
}
Status ListDelete_L(LinkList &L, int i, ElemType &e) {
p = L; j = 0;
while (p && j < i - 1) { p = p->next; ++j; }
if (p->next || j>i - 1) return FALSE;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
}
LNode * LocateElem_L(LinkList L, ElemType e) {
if (!L) return NULL;
p = L;
while (p&&p->data != e) { p = p->next };
return p;
}
void CreateList_L(LinkList &L, int n) {
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
for (i = n; i > 0; --i) {
p = (LinkList)malloc(sizeof(LNode));
scanf(&p->data);
p->next = L->next;
L->next = p;
}
}
void MergeList_L(LinkList &La, LinkList &Lb,) {
pa = La->next;
pb = Lb->next;
q = La;
while (pa && pb) {
if (pa->data <= pb->data) {
q = pa;
pa = pa->next;
}
else {
t = pb;
pb = pb->next;
t->next = pa;
q->next = t;
q = t;
}
}
if (pb) q->next = pb;
}
typedef struct LNode {
ElemType data;
struct LNode *next;
} *Link, *Position;
Status MakeNode(Link &p, ElemType e){}
void FreeNode(Link &p)
typedef struct DuLNode {
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode, *DuLinkList;
#define MAX_SIZE 1000
typedef struct {
ElemType data;
int cur;
} Component, StaticLinkList[MAX_SIZE];
typedef Component SLinkList[MAX_SIZE];
Status InitList_SL(StaticLinkList &space) {
int i;
for (i = 0; i < MAX_SIZE - 1; i++)
space[i].cur = i + 1;
space[MAX_SIZE - 1].cur = 0;
return TRUE;
}
int LocateElem_SL(SLinkList S, ElemType e) {
i = S[0].cur;
while (i && S[i].data != e)
i = S[i].cur;
return i;
}
int Malloc_SLL(StaticLinkList space) {
i = space[0].cur;
if(space[0].cur)
space[0].cur = space[i].cur;
return i;
}
void Free_SLL(SLinkList &space, int k) {
space[k].cur = space[0].cur;
space[0].cur = k;
}
Status ListInsert(StaticLinkList L, int i, ElemType e) {
int j, k, l;
k = MAX_SIZE - 1;
if (i<1 || i>ListLength(L) + 1) {
return FALSE;
}
j = Malloc_SLL(L);
if (j)
{
L[j].data = e;
k = L[k].cur;
for (l = 1; l <= i - 1; l++)
{
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return TRUE;
}
return TRUE;
}