순서 표 기본 작업 의 실현

5322 단어 데이터 구조
#include
#include
#define InitSize 100   //      
#define OVERFLOW -2
typedef int ElemType;  //    ,             ,   int  char , ElemType     char  
typedef struct{
    ElemType *data;    //           
    int MaxSize,length;//          (    )
} SqList;              //              


int InitList(SqList *L){
    L->data = (ElemType *)malloc(InitSize*sizeof(ElemType));  //      
    if(!L->data) exit(OVERFLOW);
    L->length = 0;                                           //      
    L->MaxSize = InitSize;                                   //       
    return 1;
}


void CreatList(SqList *L,ElemType e){                        //          ,              
    if(L->length >= L->MaxSize)
        printf("        
");     L->data[L->length] = e;     L->length++;     return ; } int Length(SqList *L){     return L->length;                                        // } int LocateElem(SqList *L,ElemType e){                        // ,     int i;     for(i = 0;ilength;i++)     {         if(L->data[i] == e)         {             printf(" ,%d %d
",e,i+1);             return 0;                                        //for e ,         }     }     printf(" 。");     return 0; } int GetElem(SqList *L,int i){                                // ,     if(i<0 || i>L->length)     {         printf(" 。
");     }     else     {         i = L->data[i-1];         printf(" , %d
",i);     } } int ListInsert(SqList *L,int i,ElemType e){                  // e     if(i<1 || i>L->length+1)         printf("
");                            //     if(L->length >= L->MaxSize)         printf("
");     for(int j = L->length;j >= i;j--)         L->data[j]=L->data[j-1];     L->data[i-1] = e;     L->length++;     return 1; } int ListDelete(SqList *L,int i){                             // , e ,     if(i<1 || i>L->length)         printf("
");     ElemType e = L->data[i-1];     for(int j=i;jlength;j++)         L->data[j-1] = L->data[j];                           //     L->length--;     return e; } void PrintList(SqList *L){                                   //     int i;     for(i = 0;i < L->length;i++)     {         printf("%d",L->data[i]);     }     printf("
");     return ; } int Empty(SqList *L){     return L->length == 0; } //void DestroyList(SqList L){ //  free(L); //} int main(){     SqList list;     InitList(&list);     int length;     printf(" :");     scanf("%d",&length);     int i;     ElemType temp;     printf(" :");     for(i = 0;i < length;i++)     {         scanf("%d",&temp);         CreatList(&list,temp);     }     printf(" :");     PrintList(&list);     int pos;     printf(" :");     scanf("%d %d",&pos,&temp);     ListInsert(&list,pos,temp);     printf(" :");     PrintList(&list);     printf(" :");     scanf("%d",&pos);     ListDelete(&list,pos);     printf(" :");     PrintList(&list);     printf(" :");     scanf("%d",&temp);     LocateElem(&list,temp);     printf(" :");     scanf("%d",&i);     GetElem(&list,i);     //DestroyList(list); }
 
  

#define MaxSize 100   //         
typedef int ElemType;
typedef struct{
    ElemType data[MaxSize];    //      
    int length;//     (    )
} SqList;              //        
1 차원 배열 은 정적 으로 분 배 될 수도 있 고 동적 으로 분 배 될 수도 있다.정적 분 배 를 할 때 배열 의 크기 와 공간 이 미리 고정 되 어 있 기 때문에 공간 이 가득 차 면 새로운 데 이 터 를 추가 하면 넘 쳐 서 프로그램 이 무 너 집 니 다.한편, 동적 분 배 를 할 때 배열 을 저장 하 는 공간 은 프로그램 이 실행 하 는 과정 에서 동적 저장 배분 문 구 를 통 해 분 배 된 것 으로 데이터 공간 이 가득 차 면 더 큰 공간 을 만 들 수 있다.
#define InitSize 100   //      
typedef int ElemType;  //    ,             ,   int  char , ElemType     char  
typedef struct{
    ElemType *data;    //           
    int MaxSize,length;//          (    )
} SqList;              //              
C 의 초기 동적 할당 문 구 는?
L->data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
C + + 의 초기 동적 할당 문 구 는?
L->data = new ElemType[InitSize];
공간 이 부족 할 때 공간 을 재배 치 합 니 다.
void Malloc(SqList *L)//                
{  
    ElemType *newbase;//          
    newbase=(ElemType *)realloc(L->data,(L->MaxSize+AddSize)*sizeof(ElemType));  
    if(!newbase) exit(OVERFLOW);  
    L->data=newbase;  
    L->MaxSize+=AddSize;  
}
AddSize 는 미리 정 의 된 값 으로 저장 공간의 분배 증 가량 이다.이 함수 에 프로그램 이 추가 되 지 않 았 습 니 다. 이 함 수 를 사용 하려 면 이 프로그램 에서 '현재 저장 공간 이 가득 찼 습 니 다' 를 출력 하여 이 함 수 를 호출 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기