线性表的顺序存储

#ifndef _DYNAMIC_ARRAY_H

#define _DYNAMIC_ARRAY_H

#include <stdlib.h>

typedef struct DynamicArray
{
    int* pAddr; //元素
    int size; //长度
    int capacity; //容量
}Dynamic_Array;

Dynamic_Array* Init_Array();

void Push_Back_Array(Dynamic_Array* array, int value);

void Remove_Pos_Array(Dynamic_Array* array, int pos);

void Remove_Value_Array(Dynamic_Array* array, int value);

int Find_Array(Dynamic_Array* array, int value);

void Print_Array(Dynamic_Array* array);

void Free_Array(Dynamic_Array* array);

void Clear_Array(Dynamic_Array* array);

int Capacity_Array(Dynamic_Array* array);

int Size_Array(Dynamic_Array* array);

int At_Array(Dynamic_Array* array, int pos);

#endif

 

 

#include "DynamicArray.h"

Dynamic_Array* Init_Array()
{
    Dynamic_Array* myarray = (Dynamic_Array*)malloc(sizeof(Dynamic_Array));
    myarray->size = 0;
    myarray->capacity = 20;
    myarray->pAddr = (int*)malloc(sizeof(int)*myarray->capacity);
    return myarray;
}

void Push_Back_Array(Dynamic_Array* array, int value) //插入元素
{
    if(array->size == array->capacity)
    {
        int* newspace = (int*)malloc(sizeof(int)*array->capacity * 2);
        memcpy(newspace, array->pAddr, array->capacity*sizeof(int));
        free(array->pAddr);
        // 或者realloc(array->pAddr, sizeof(int)*array->capacity * 2)
        array->capacity = array->capacity * 2;
        array->pAddr = newspace;

 

        // 或者仅此一行realloc(array->pAddr, sizeof(int)*array->capacity * 2)
    }
    array->pAddr[array->size] = value;
    array->size++;
}

void Remove_Pos_Array(Dynamic_Array* array, int pos) //移除pos位置的数据
{
    if (array == NULL)
    {
        return;
    }
    if (pos < 0 || pos >= array->size)
    {
        return;
    }
    for (int i = pos; i < array->size - 1; i++)
    {
        array->pAddr[i] = array->pAddr[i + 1];
    }
    array->size--;
}

void Remove_Value_Array(Dynamic_Array* array, int value) //移除vakue值
{
    if (array == NULL)
    {
        return;
    }
    for (int i = 0; i < array->size; i++)
    {
        if (array->pAddr[i] == value)
        {
            Remove_Pos_Array(array, i);
            break;
        }
    }
}

int Find_Array(Dynamic_Array* array, int value) //按值查找
{
    if (array == NULL)
    {
        return -1;
    }
    int pos = -1;
    for (int i = 0; i < array->size; i++)
    {
        if (array->pAddr[i] == value)
        {
            pos = i;
            return pos;
        }
    }
    if (pos == -1)
    {
        return -1;
    }
}

void Print_Array(Dynamic_Array* array) //打印数据
{
    for (int i = 0; i < array->size; i++)
    {
        printf("%d  ", array->pAddr[i]);
    }
    printf("\n");
}

void Free_Array(Dynamic_Array* array)
{
    if (array == NULL)
    {
        return 0;
    }
    else if (array->pAddr != NULL)
    {
        free(array->pAddr);
    }
    free(array);
}

void Clear_Array(Dynamic_Array* array)
{
    if (array == NULL)
    {
        return;
    }
    array->size = 0;
}

int Capacity_Array(Dynamic_Array* array)
{
    if (array == NULL)
    {
        return 0;
    }
    return array->capacity;
}

int Size_Array(Dynamic_Array* array)
{
    if (array == NULL)
    {
        return 0;
    }
    return array->size;
}

int At_Array(Dynamic_Array* array, int pos) //返回特定位置的值
{
    if (array == NULL)
    {
        return 0;
    }
    return array->pAddr[pos];
}

#include <stdio.h>

#include "DynamicArray.h"

void text()
{
    Dynamic_Array* myarray = Init_Array();
    for (int i = 0; i < 30; i++)
    {
        Push_Back_Array(myarray, i);
    }
    /*Remove_Value_Array(myarray, 10);
    Remove_Pos_Array(myarray, 9);*/
    Print_Array(myarray);
    printf("%d\n", Find_Array(myarray, 5));
    Free_Array(myarray);
}
int main()
{
    text();
    system("pause");
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值