#include " ../include.h " typedef struct CrLNode ... { ElemType e; struct CrLNode *next;} CrLNode, * CrLinkList;Status InitList(CrLinkList * l) ... { *l = (CrLinkList)malloc(sizeof(CrLNode)); if(!*l) ...{ exit(OVERFLOW); } (*l)->next = *l; return OK;} Status ListInsert(CrLinkList l,ElemType e, int i) ... { CrLNode *p = l; int j = -1; while(p->next != l && j < i - 1) ...{ p = p->next; j++; } if(j != i - 1) ...{ return INFEASIBLE; } CrLNode *q = (CrLNode *)malloc(sizeof(CrLNode)); if(!q) ...{ exit(OVERFLOW); } q->e = e; q->next = p->next; p->next = q; return OK;} Status ListDelete(CrLinkList l,ElemType * e, int i) ... { CrLNode *p = l; int j = -1; while(p->next != l && j < i - 1) ...{ p = p->next; j++; } if(j != i - 1) ...{ return INFEASIBLE; } CrLNode *q = p->next; *e = q->e; p->next = q->next; free(q); return OK;} int Locate(CrLinkList l,ElemType e) ... { CrLNode *p = l->next; int j = 0; while(p != l) ...{ if(p->e == e) ...{ return j; } p = p->next; j++; } return INFEASIBLE;} void Print(CrLinkList l) ... { CrLNode *p = l->next; while(p != l) ...{ printf("%d ",p->e); p = p->next; } printf(" ");} Status DestoryList(CrLinkList * l) ... { CrLNode *p = (*l)->next; CrLNode *next = NULL; while(p != *l) ...{ next = p->next; free(p); p = next; } free(*l); return OK;} int main() ... { CrLinkList l; printf("Init list..."); InitList(&l); printf("initialed. "); printf("Insert elements: 58 28 34 90 12 66 "); ListInsert(l,58,0); ListInsert(l,28,1); ListInsert(l,34,2); ListInsert(l,66,3); ListInsert(l,12,3); ListInsert(l,90,3); printf("Result: "); Print(l); printf("Locate elements: 28 66 58 "); printf("%d ",Locate(l,28)); printf("%d ",Locate(l,66)); printf("%d ",Locate(l,58)); printf("Delete elements: 66 12 58 "); ElemType e; ListDelete(l,&e,5); ListDelete(l,&e,4); ListDelete(l,&e,0); printf("Result: "); Print(l); printf("Destory list..."); DestoryList(&l); printf("destoried. ");}