c
const int ERROR = 0;
const int OK = 1;
const int INFEASIBLE = -1;
const int OVERFLOW = -2;
const int TRUE = 1;
const int FALSE= 0;
const int errInt = -999;
#define errV ' '
typedef int Status;
typedef char ElemType; // 元素类型
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList;
LinkList CreateList(int n, ElemType s[]) {
if(n < 0 || !s) return NULL;
LinkList L,p;
if(!(L=p=(LNode*)calloc(1, sizeof(LNode)))) exit(OVERFLOW);
for(int i =0; i < n; ++i) {
if(!(p->next = (LNode*)malloc(sizeof(LNode)))) exit(OVERFLOW);
p = p->next;
p->data=s[
i];
}
return L;
}
ElemType GetElem(LinkList L, int i) {
if(!L || i < 1) return errV;
LNode *p = L->next; int j = 1;
while(p && j < i) {
p = p->next;
++j;
}
if(!p) return errV;
return p->data;
}
Status ListInsert(LinkList L, int i, ElemType e) {
if(!L || i < 1) return ERROR;
LNode *s,*p = L; int j = 0;
while(p && j < i - 1) {
p = p->next;
++j;
}
if(!(s = (LNode*)malloc(sizeof(LNode))))
exit(OVERFLOW);
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
ElemType ListDelete(LinkList L, int i) {
if(!L || i < 1) return errV;
LNode *q, *p = L; int j = 0;
while(p->next && j < i - 1) {
p = p->next;
++j;
}
if(!p->next) return errV;
q = p->next;
p->next = q->next;
ElemType e = q->data;
free(q);
return e;
}
LinkList MergeList(LinkList La, Linklist Lb) {
if(!La || !Lb) return NULL;
LNode *Lc, *pc, *pa=La->next, *pb=Lb->next;
Lc = pc = La;
while(pa && pb) {
if(pa->data <= pb->data) {
pc->next = pa;
pc = pa;
pa = pa->next;
}else {
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa?pa:pb;
free(Lb);
return Lc;
}
Status ListTraverse(LinkList L, Status(*Visit)(ElemType)) {
if(!L) return ERROR;
L = L->next;
while(L && Visit(L->data)) {
L = L->next;
}
if(L) return ERROR;
return OK;
}