순서 표 초기 화, 삽입, 삭제

6256 단어 데이터 구조
어젯밤 에 중국 이동 소주 소프트웨어 회사 의 여름 실습 실 필기시험 문 제 를 풀 었 는데 충격 을 받 았 다. 특히 독선 적 인 데이터 구조 문제 (빠 른 배열, 병합 정렬, 쌓 기 정렬 에서 하나의 실현) 는 데이터 구 조 를 다시 한 번 배우 고 중요 한 데이터 구 조 를 프로그램 으로 실현 하기 로 결정 했다.여기 서 먼저 이 루어 진 것 은 순서 표 의 초기 화, 삽입, 삭제 작업 입 니 다.
#include
using namespace std;
// - - - -                - - - - 
#define LIST_INIT_SIZE 100  //          
#define INCREMENT 10        //         
#define ElemType char

typedef struct{
    //        
    ElemType *elem;   //       
    int length;       //    
    int listsize;     //         
}SqList;

//       
int InitList_Sq(SqList *L){
    L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//        
    if (L->elem == NULL)
        return 0;
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return 0;
}

int ListInsert_Sq(SqList *L, int i, ElemType e){
    //    L  i         e
    if (i<1 || i>L->length + 1)
        cout << "i    " << endl;
    if (L->length >= L->listsize){    //      ,    
        ElemType *newbase = (ElemType *)realloc(L->elem, (L->listsize + INCREMENT)*sizeof(ElemType));
        if (newbase = NULL){
            cout << "    " << endl;
            return 0;
        }
        L->elem = newbase;      //    
        L->listsize += INCREMENT;//      
    }
    ElemType *q = &(L->elem[i - 1]);//q     
    for (ElemType *p = &(L->elem[L->length - 1]); p >= q; --p)
        *(p + 1) = *p;    //            

    *q = e; //    
    +L->length; //   1
    return 1;
}

int ListDelete_Sq(SqList *L, int i, ElemType *e){
    //       i   ,  e    
    if (i<1 || i>L->length + 1){          //i     1 length
        cout << "i    " << endl;
        return 0;
    }
    ElemType *p = &(L->elem[i - 1]);  //p          
    *e = *p; // p    e
    ElemType *q = L->elem + L->length - 1;//       
    for (++p; p <= q; ++p)
        *(p - 1) = *p;
    --L->length;
    return 0;
}

int main(){
    SqList L;
    InitList_Sq(&L);
    for (int i = 0; i < 22; i++)
        ListInsert_Sq(&L, 1, 'a' + i);
    ElemType e;
    ListDelete_Sq(&L, 10, &e);
    cout << "      " << e;

    for (int j = 0; j < L.length; j++)
        cout << L.elem[j];
    return 0;
}

좋은 웹페이지 즐겨찾기