선형 표 (데이터 구조 가 엄격 하고 민감 하 다)

인터넷 에 책 을 훑 는 코드 를 붙 이 는 것 은 별 재미 가 없다
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef int ElemType;

#define LIST_INIT_SIZE 10
#define LISTINCREMENT 2
typedef struct
{
    ElemType *elem;
    int length;
    int listsize;
}SqList;

Status InitList(SqList *L) /*   2.3 */
 { /*     :            */
   (*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
   if(!(*L).elem)
     exit(OVERFLOW); /*        */
   (*L).length=0; /*      0 */
   (*L).listsize=LIST_INIT_SIZE; /*        */
   return OK;
 }

 Status ClearList(SqList *L)
 { /*     :     L   。    : L      */
   (*L).length=0;
   return OK;
 }

 Status ListEmpty(SqList L)
 { /*     :     L   。    : L   ,   TRUE,    FALSE */
   if(L.length==0)
     return TRUE;
   else
     return FALSE;
 }

 Status ListInsert(SqList *L,int i,ElemType e) /*   2.4 */
 { /*     :     L   ,1≤i≤ListLength(L)+1 */
   /*     : L  i             e,L    1 */
   ElemType *newbase,*q,*p;
   if(i<1||i>(*L).length+1) /* i     */
     return ERROR;
   if((*L).length>=(*L).listsize) /*         ,     */
   {
     newbase=(ElemType *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(ElemType));
     if(!newbase)
       exit(OVERFLOW); /*        */
     (*L).elem=newbase; /*     */
     (*L).listsize+=LISTINCREMENT; /*        */
   }
   q=(*L).elem+i-1; /* q      */
   for(p=(*L).elem+(*L).length-1;p>=q;--p) /*              */
     *(p+1)=*p;
   *q=e; /*   e */
   ++(*L).length; /*    1 */
   return OK;
 }

 Status ListDelete(SqList *L,int i,ElemType *e) /*   2.5 */
 { /*     :     L   ,1≤i≤ListLength(L) */
   /*     :  L  i     ,  e    ,L    1 */
   ElemType *p,*q;
   if(i<1||i>(*L).length) /* i     */
     return ERROR;
   p=(*L).elem+i-1; /* p          */
   *e=*p; /*          e */
   q=(*L).elem+(*L).length-1; /*         */
   for(++p;p<=q;++p) /*              */
     *(p-1)=*p;
   (*L).length--; /*    1 */
   return OK;
 }

 Status GetElem(SqList L,int i,ElemType *e)
 { /*     :     L   ,1≤i≤ListLength(L) */
   /*     : e  L  i        */
   if(i<1||i>L.length)
     exit(ERROR);
   *e=*(L.elem+i-1);
   return OK;
 }

좋은 웹페이지 즐겨찾기