[꼭대기] 선형 표 의 기본 조작

2569 단어
최근 에는 데이터 구 조 를 배 워 서 요 며칠 동안 선형 표를 주로 배 웠 다.그것 의 정 의 는 다음 과 같다. 선형 표 는 가장 기본 적 이 고 가장 간단 하 며 가장 자주 사용 하 는 데이터 구조 이다.선형 표 에서 데이터 요소 간 의 관 계 는 일대일 관계 이다. 즉, 첫 번 째 와 마지막 데이터 요 소 를 제외 하고 다른 데이터 요 소 는 모두 첫 번 째 와 끝 이 연결 되 어 있다.선형 표 의 논리 구 조 는 간단 하여 실현 과 조작 에 편리 하 다.선형 표 의 초기 화, 할당, 삭제 등 을 적 었 습 니 다.구체 적 인 것 은 다시 보충 하 겠 습 니 다.
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
# define    LIST_INIT_SIZE       100

# define    LISTINCREMENT    10

# define TRUE 1
# define FALSE 0 
# define OK 1
# define ERROR 0
# define INFEASIBLE -1
# define OVERFLOW -2

typedef int  Status;
typedef int  ElemType;
//          
typedef    struct {
         ElemType     * elem;//     
         int          length ; //   ,    0
         int        listsize ;//      
} SqList ;
//      
Status   InitList_Sq ( SqList  *L) {
L->elem = ( ElemType * ) malloc
                         ( LIST_INIT_SIZE * sizeof(ElemType) );
if  ( ! L->elem )   exit(OVERFLOW) ;
L->length = 0 ;
L->listsize = LIST_INIT_SIZE ;
return  OK ;
}
//       i       
Status   Insert_sq(SqList *L,int i ,ElemType e){
	int *newbase,*q,*p ;

	//     i      
	if(i<1||i>L->length) return ERROR ;
    //        ,        
	if(L->length>=L->listsize){
	 newbase  = (ElemType*)realloc(L->elem,(L->listsize+ LISTINCREMENT)*(LISTINCREMENT));
	 if(!newbase) exit(OVERFLOW) ;//    
	 L->elem = newbase;
	 L->listsize += LISTINCREMENT ;
	}
	
	//         
	q = &(L->elem[i-1]);
	for(p = &(L->elem[L->length-1]);p>=q;--p)
		*(p+1)= * p ;
	//  e  
	*q = e ;//  
	++L->length;//   1
	return OK;
}

//     I    ,   e 
Status GetElem(SqList *L,int i ,ElemType e){
    //  i      
	int a ;
	if((i<1)||(i>L->length+1)) return ERROR ;
	for( a= 0 ;a<L->length-1;a++){
		if(a==i){
	     e = L->elem[a] ;
		 break;
		}
		}
	return e ;
}
//  
Status Delete(SqList *L,int i ,ElemType e){
      ElemType *p,*q;
	 if((i<1)||(i>L->length+1)) return ERROR ;
	    e = L->elem[i-1] ; //    i    e
	    p = &(L->elem[i-1]);//i    
        q = (L->elem) +(L->length-1) ;//     
		//             
 		for(++p;p<=q;++p)
		   *(p-1) = *p;
		   --L->length;//   1 
		   return OK;
	  }

int main()
{
	Status   InitList_Sq ( SqList  *L );
    SqList  L;
	int j=1;
	int i;
	int a ;
    InitList_Sq ( &L );

   //      
	for(i=1;i<=6;i++){
	scanf("%d",&L.elem[i-1]);
	 ++L.length;
	}
	//      
	for(j=1;j<=6;j++)
     printf("%d",L.elem[j-1]);
	
}

좋은 웹페이지 즐겨찾기