L->listsize=LISTINCreMENT for (j=L->length: j>i&&j; j-)L->elem [j]=L->elem[j-1] L->length+=l return OK Status ListDelete Sq (sqList *L, int 1, ElemType *e)i if(i<o i>=L->length)return ERROR L->elem[il for(j=i; j<L->length-1: j++)L->elem[j]=L->elem[j+1 L->length-=l return oK void ListPrint Sq(sqList L)( for(i=0; i<L length; i++)printf(%3d", L elem[il) main i int m Sqlist l; InitList Sq( &L) for(m=0;m<10;m+) if(! ListInsert Sq(&L, m, 2*m))printf("error") ListPrint Sq( l) 线性表的链式存储与实现 /This list use link, have a head node * #include like h #include <stdio. h typedef int ElemType typedef struct LNode f ElemType data struct LNode * next )LNode, * LinkList Status InitList L(LinkList *L)( *L=(LinkList)malloc(sizeof(LNode)) if(!(*L)exit(OVERFLOW) (料L)->next=NUL; return OK
L->listsize+=LISTINCREMENT; } for(j=L->length;j>i&&j;j--)L->elem[j]=L->elem[j-1]; L->elem[i]=e; L->length+=1; return OK; } Status ListDelete_Sq(SqList *L,int i,ElemType *e){ int j; if(i<0||i>=L->length)return ERROR; *e=L->elem[i]; for(j=i;j<L->length-1;j++)L->elem[j]=L->elem[j+1]; L->length-=1; return OK; } void ListPrint_Sq(SqList L){ int i; for(i=0;i<L.length;i++)printf("%3d",L.elem[i]); } main() { int m; SqList L; InitList_Sq(&L); for(m=0;m<10;m++) if(!ListInsert_Sq(&L,m,2*m))printf("error"); ListPrint_Sq(L); } 线性表的链式存储与实现 /*This list use link,have a head node */ #include "likec.h" #include <stdio.h> typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; Status InitList_L(LinkList *L){ *L=(LinkList)malloc(sizeof(LNode)); if(!(*L))exit(OVERFLOW); (*L)->next=NULL; return OK;
void DestroyList L(LinkList *L)I Linklist p=kL, q while(p)i p=p->next free(g) *LENULL void ClearList L(LinkList *L)( LinkList p=(*L)->next, q while(p)i p=p->next free(g) (*L)->next=NULL Status ListEmpty L(LinkList L)( if(L->next==NULLreturn else return false int ListLength L(LinkList L)[ LinkList p: for(p=L->next: p: p=p->next)i++ return 1 Status GetElem L(LinkList L, int i, ElemType *e) Int J while(l&&j!=i)[ L=L->next f(j==i)(*e=L->data return OK: else return error LinkList LocateElem L (LinkList L, ElemType e)I Linklist p=L->next while(p&&p->data!=e)p=p->next return(p)
} void DestroyList_L(LinkList *L){ LinkList p=*L,q; while(p){ q=p; p=p->next; free(q); } *L=NULL; } void ClearList_L(LinkList *L){ LinkList p=(*L)->next,q; while(p){ q=p; p=p->next; free(q); } (*L)->next=NULL; } Status ListEmpty_L(LinkList L){ if(L->next==NULL)return TRUE; else return FALSE; } int ListLength_L(LinkList L){ LinkList p; int i=0; for(p=L->next;p;p=p->next)i++; return i; } Status GetElem_L(LinkList L,int i,ElemType *e){ int j=-1; while(L&&j!=i){ L=L->next; j++; } if(j==i){*e=L->data; return OK; } else return ERROR; } LinkList LocateElem_L(LinkList L,ElemType e){ LinkList p=L->next; while(p&&p->data!=e) p=p->next; return(p);