日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

線性表順序存儲案例--動態(tài)數(shù)組

 白云cjl 2018-05-24
seqlist.h
---------------------------------------------------------------------------------
#ifndef  __MY_SEQLIST_H__
#define __MY_SEQLIST_H__

//順序存儲鏈表
//動態(tài)數(shù)組案例:

typedef struct MyArray{
    int* ArrayAddr; //數(shù)據(jù)首地址
    int capacity; //數(shù)據(jù)容量
    int length; //數(shù)據(jù)長度
}MyArray;



//初始化數(shù)組
MyArray* Init_MyArray();

//判斷數(shù)組是否為空 0:false 不為空  1:true 為空
int IsEmpty_MyArray(MyArray* array);

//清空數(shù)組
int Clear_MyArray(MyArray* array);

//獲得指定位置元素
int GetElement_MyArray(MyArray* array,int pos);

//向指定位置插入元素
int InsertElement_MyArray(MyArray* array, int pos,int val);

//刪除指定位置元素
int RemoevElement_MyArray(MyArray* array, int pos);

//獲得鏈表長度
int GetLength_MyArray(MyArray* array);

//獲得鏈表容量
int GetCapacity_MyArray(MyArray* array);

//銷毀數(shù)組
int DestroyArray_MyArray(MyArray* array);

//打印數(shù)組內(nèi)容
void PrintArray_MyArray(MyArray* array);


#endif  //__MY_SEQLIST_H__
===========================================================================

seqlist.c
---------------------------------------------------------------------------
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MYARRAY_TRUE 1
#define MYARRAY_FALSE 0

//定義結(jié)構(gòu)體 保存數(shù)據(jù)首地址和數(shù)組長度
typedef struct MyArray{
    int* ArrayAddr; //數(shù)據(jù)首地址
    int capacity; //數(shù)據(jù)容量
    int length; //數(shù)據(jù)長度
}MyArray;


//初始化數(shù)組
MyArray* Init_MyArray()
{
    MyArray* array = (MyArray*)malloc(sizeof(MyArray));
    array->ArrayAddr = (int *)malloc(sizeof(int) * 20);
    if(array->ArrayAddr == NULL)
    {
        printf("apply mem failed!");
        return NULL;
    }

    memset(array->ArrayAddr, 0, sizeof(int)*20);
    array->length = 0;
    array->capacity = 20;

    return array;
}

//判斷數(shù)組是否為空 0:false 不為空  1:true 為空
int IsEmpty_MyArray(MyArray* array)
{
    if(array == NULL)
    {
        return -1;
    }

    if(array->length == 0)
    {
        return 1;
    }

    return 0;
}

//清空數(shù)組
int Clear_MyArray(MyArray* array)
{
    if(array == NULL)
    {
        return -1;
    }

    if(array->ArrayAddr != NULL)
    {
        memset(array->ArrayAddr, 0, array->capacity*(sizeof(int)));
    }

    array->length = 0;

    return 0;

}


//獲得指定位置元素
int GetElement_MyArray(MyArray* array,int pos)
{
    if(array == NULL)
    {
        return -1;
    }

    if(pos > array->length -1)
    {
        printf("pos is out of the length of array");
        return -3;
    }

    return array->ArrayAddr[pos];

}

//向指定位置插入元素
int InsertElement_MyArray(MyArray* array, int pos,int val)
{
    int i;
    if(array == NULL)
    {
        return -1;
    }

    if(pos > array->capacity)
    {
        printf("pos is out of array capacity:err: %d", pos);
        return -2;
    }

    if(pos > array->length )
    {
        pos = array->length ;
    }

    if(array->length == array->capacity)
    {
        int *newSpace = (int*)malloc(2*array->capacity * sizeof(int));
        memset(newSpace, 0, 2*array->capacity * sizeof(int));
        memcpy(newSpace, array->ArrayAddr, array->length * sizeof(int));

        if(NULL != array->ArrayAddr)
        {
            free(array->ArrayAddr);
        }

        array->ArrayAddr = newSpace;
        array->capacity = array->capacity*2;

    }


    for(i = array->length-1; i >= pos; i--)
    {
        array->ArrayAddr[i+1] = array->ArrayAddr[i];
    }

    array->ArrayAddr[pos] = val;
    array->length++;

    return 0;
}


//刪除指定位置元素
int RemoevElement_MyArray(MyArray* array, int pos)
{
    int i;
    if(array == NULL)
    {
        return -1;
    }

    if(pos > array->length)
    {
        printf("pos is out of array length, err: %d", pos);
        return -2;
    }

    for(i=pos; i<array->length-1; i++)
    {
        array->ArrayAddr[i] = array->ArrayAddr[i+1];
    }

    array->length--;

    return 0;
}


//獲得鏈表長度
int GetLength_MyArray(MyArray* array)
{
    if(array == NULL)
    {
        return -1;
    }
    return array->length;
}


//獲得鏈表容量
int GetCapacity_MyArray(MyArray* array)
{
    if(array == NULL)
    {
        return -1;
    }
    return array->capacity;
}


//銷毀數(shù)組
int DestroyArray_MyArray(MyArray* array)
{
    if(array == NULL)
    {
        return -1;
    }

    if(NULL != array->ArrayAddr)
    {
        free(array->ArrayAddr);
        array->ArrayAddr = NULL;
    }

    array->capacity = 0;
    array->length = 0;

    free(array);

    return 0;
}


//打印數(shù)組內(nèi)容
void PrintArray_MyArray(MyArray* array){

    int i;
    for(i = 0; i < array->length;i++)
    {
        printf("%d ",array->ArrayAddr[i]);
    }
    printf("\n");
}

=============================================================================
seqlist_test
-----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "seqlist.h"


//測試API
void test()
{
    int i =0 ;
    MyArray *array = Init_MyArray();//初始化數(shù)組
    //打印數(shù)組的長度和容量
    printf("數(shù)組的初始化容量:%d,  數(shù)組的初始化長度:%d", GetLength_MyArray(array), GetCapacity_MyArray(array));


    //循環(huán)向數(shù)組中插入元素
    for(i=0; i<10; i++)
    {

        InsertElement_MyArray(array, i, i);

    }


    printf("數(shù)組插入元素長度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array));

    //打印數(shù)組
    PrintArray_MyArray(array);


    InsertElement_MyArray(array, 5, 100);


    printf("數(shù)組插入元素長度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array));

    //打印數(shù)組
    PrintArray_MyArray(array);


    //刪除位置 5 的元素
    RemoevElement_MyArray(array,5);

    //打印數(shù)組
    PrintArray_MyArray(array);

    printf("數(shù)組插入元素長度:%d ,容量:%d\n", GetLength_MyArray(array), GetCapacity_MyArray(array));

    //銷毀數(shù)組
    DestroyArray_MyArray(array);

}


int main(){

    //test01();
    test();

    return 0;
}







    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多