데이터 구조 가 엄격 하고 민감 하 다 - 선형 표 의 순서 저장

6396 단어 데이터 구조
선형 표 의 순 서 는 하나의 주소 로 연속 적 인 저장 장치 로 선형 표 의 데이터 요 소 를 순서대로 저장 하 는 것 을 말한다.
사실은 배열 로 요소 의 저장 과 일련의 조작 을 하 는 것 이다.
그것 의 저장 구 조 는 다음 과 같다.

#define LIST_INIT_SIZE 100

typedef struct Arry
{
    int* Addr;              //      
    int size;              //            ,        
    int capacity;         //       
}Arry;

, ( 、 )、 ( , )、 , 。

Arry.h


#ifndef ARRY_H_INCLUDED
#define ARRY_H_INCLUDED

#include
#include
#include

#define LIST_INIT_SIZE 100

typedef struct Arry
{
    int* Addr;              //      
    int size;              //            
    int capacity;         //       
}Arry;

Arry *Init_Arry()    //   
{
    Arry * myarry = (Arry *)malloc(sizeof(Arry));
    myarry ->size = 0;
    myarry ->capacity = LIST_INIT_SIZE;
    myarry ->Addr = (int*)malloc(sizeof(int) * myarry -> capacity);
    return myarry;
}

void Destory_Arry(Arry *arr)
{
    if(arr == NULL)
    {
        return ;
    }
    arr ->size = 0;
}
void Push_Arry(Arry *arr,int value)// 
{
    if(arr -> size == arr ->capacity)
    {
        int *newspace = (int *)malloc(arr -> capacity * 3 *sizeof(int));  //           
        memcpy(newspace,arr -> Addr,arr -> capacity * sizeof(int));       //       
        free(arr->Addr);                                                  //       
        if(!newspace)                                                     //        
            exit(-1);
        arr->capacity = arr->capacity *3;                                 //    
        arr->Addr = newspace;                                             //    
    }
    arr ->Addr[arr->size] = value;                                        //     
    arr ->size++;
}
void Push_OrderArry(Arry *arr, int value)              //    
{
    if(arr -> size == arr -> capacity)
    {
        int *newspace = (int *)malloc(arr -> capacity *2*sizeof(int));
        memcpy(newspace,arr -> Addr , arr -> capacity * sizeof(int));
        free(arr -> Addr);
        if( !newspace)
            exit(-1);
        arr -> Addr = newspace;
        arr -> capacity = arr -> capacity * 2;
    }
    int i;
    for( i = arr -> size; value < arr -> Addr[i - 1]; i--)
    {
        arr -> Addr[i] = arr -> Addr[i - 1];
    }
    arr -> Addr[i] = value;
    arr -> size++;

}
void RemoveByPos(Arry *arr,int pos) //    
{
    if(arr == NULL)
    {
        printf("    ,       !");
        return;
    }
    if( pos < 0 || pos >= arr -> size)
    {
        printf("        ,     !");
        return;
    }
    int i;
    for(i = pos; i < arr -> size; i++)
    {
        arr -> Addr[i] = arr -> Addr[i+1];
    }
    arr ->size--;
}

void RemoveByValue(Arry *arr,int value)//   
{
     if(arr == NULL)
    {
        printf("    ,       !");
        return;
    }
    int i = 0,j = 0;
    while(arr -> Addr[i] != value)
    {
       i++;
       if( i == arr ->size)
       {
          printf("         ,     :");
          return;
       }
    }
    for(j = i - 1; j < arr -> size; j++)
    {
        arr -> Addr[j] = arr -> Addr[j+1];
    }
    arr ->size--;
}

int Find_Arry(Arry *arr,int value)            //  
{
     if(arr == NULL)
    {
        printf("    ,      !");
        return -1;
    }
    int i = 0;
    while(arr ->Addr[i++] != value)
        if( i == arr ->size)
        {
         printf("         !");
         return -1;
        }
    printf("           %d   !",i);
    return i;
}

void Print_Arry(Arry *arr)             //  
{
    int i;
    if(arr == NULL)
    {
        printf("    !");
        return;
    }
    for(i = 0; i < arr -> size; i++)
    {
      printf("%d ",arr->Addr[i]);
    }
    printf("
"); } void Free_Arry(Arry *arr) // { if(arr == NULL) return; if(arr ->Addr != NULL) { free(arr -> Addr); } free(arr); } void Reverse_Arry(Arry *arr) { if(arr == NULL) { printf(" !
"); return; } int i,temp; for(i = 0; i < arr->size/2; i++) { temp = arr->Addr[i]; arr->Addr[i] = arr->Addr[arr->size - i - 1]; arr->Addr[arr->size - i - 1] = temp; } printf(" !
"); } #endif // ARRY_H_INCLUDED

main.c


#include 
#include 
#include 

#include "Arry.h"
void testReverse()      //    
{
    int i;
    Arry * myarry = Init_Arry(); //   

    for( i= 1; i <= 5;i++ )   //    
    {
        Push_Arry(myarry,i);
    }
    Print_Arry(myarry);    //  
    Reverse_Arry(myarry);
    Print_Arry(myarry);
}
void test()                 //      
{
    int i;
    Arry * myarry = Init_Arry(); //   
    Arry * myarry1 = Init_Arry();
    for( i= 0; i < 5;i++ )   //    
    {
        Push_Arry(myarry,i);
    }
    for( ; i < 10; i++ )
    {
        Push_Arry(myarry1,i);
    }
    Print_Arry(myarry);    //  
    Print_Arry(myarry1);
    printf("     ;%d
",myarry ->capacity); printf(" :%d
",myarry ->size); //Find_Arry(myarry,5); //Push_OrderArry(myarry,0); //Print_Arry(myarry); /*Push_Arry(myarry,10); Print_Arry(myarry); printf("
"); printf(" ;%d
",myarry ->capacity); printf(" :%d
",myarry ->size); RemoveByPos(myarry,10); printf(" :"); Print_Arry(myarry); RemoveByValue(myarry,5); printf(" :"); Print_Arry(myarry); printf(" :"); Free_Arry(myarry); Print_Arry(myarry);*/ } int main() { //testReverse(); //test(); system("pause"); return 0; }

: , 。

 

좋은 웹페이지 즐겨찾기