c言語実現シーケンスチェーンテーブル

18172 ワード

注意事項:
  • 要素個数を変更するとlenth
  • が更新される
  • 要素を追加する場合、表が
  • であるかどうかを確認します.
  • 挿入、削除時に位置が合法かどうかを検査する
  • .
  • はアドレスを取る記号でできるだけ使うことができて、コードは簡潔です
  • ライブラリ関数reallocの使い方
  • 原理分析:SqList構造体変数は1つのポインタの頭部を提供するだけで、残りの操作はすべて関数によって完成する.
    #include
    #include
    #include
    #define ElemType int
    #define List_Init_Size 100 
    #define List_Increament 10
    #define OK 1 
    
    typedef struct {
    	ElemType *elem;//     
    	int lenth;
    	int listsize;
    }SqList;
    
    int InitList_Sq(SqList &L)  //       
    {
    	L.elem = (ElemType *)malloc(List_Init_Size*(sizeof(ElemType)));
    	if(!L.elem)exit(-1);
    	L.lenth = 0;
    	L.listsize = 0;
    	return OK;
    }
    
    ElemType GetElem_Sq(SqList L,int i){   //    
    	return L.elem[i-1];
    }
    
    int ListInsert_Sq(SqList &L,int i,ElemType e){   //    
    	if((i<1)||(i>L.lenth+1)) exit(-1);    //        
    	if(L.lenth>=L.listsize){                //       
    		ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize+List_Increament)*sizeof(ElemType));
    		if(!newbase)exit(-1);
    		L.elem = newbase;
    		L.listsize += List_Increament;
    	} 
      //                ,            
    	ElemType *p = NULL;
    	for(p = &L.elem[L.lenth-1];p>=&L.elem[i-1];p--) *(p+1) = *p;
    	L.elem[i-1] = e;
    	L.lenth++;
    	return OK; 
    }
    
    int ListAppend_Sq(SqList &L,ElemType e){    //  
    	if(L.lenth>=L.listsize){            //      
    		ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize+List_Increament)*sizeof(ElemType));
    		if(!newbase)exit(-1);
    		L.elem = newbase;
    		L.listsize +=List_Increament;
    	}
    	L.elem[L.lenth] = e;
    	L.lenth++;
    	return OK;
    }
    
    int ListDelete_Sq(SqList &L,int i,ElemType e){    //    
    	if((i<1)||(i>L.lenth))exit(-1);             //        
    	e = L.elem[i-1];
    	ElemType *p = NULL;
    	for(p = &L.elem[i];p <= &L.elem[L.lenth-1];p++) *(p-1) = *p;
    	L.lenth--;
    	return OK;
    }
    
    void ListPrint_Sq(SqList L)
    {
    	for(int i = 0;i<L.lenth;i++)
    	{
    		printf(" %d    %d
    "
    ,i+1,L.elem[i]); } } main() { SqList L; ElemType e; InitList_Sq(L); ListInsert_Sq(L,1,23); ListAppend_Sq(L,16); ListInsert_Sq(L,2,15); ListDelete_Sq(L,2,e); ListPrint_Sq(L); }

    出力:
     1    23
     2    16