C++ 顺序表练习

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct Array  //定义一个数据存储结构
{
    int* data;//内存地址
    int length;//顺数表长度
    int listsize;//顺序表大小
};

typedef  struct Array Array;

Array* createArray()
{
    Array *temp = (Array*)malloc(sizeof(Array)); //顺序表的结构体初始化
    if (temp == NULL) //判断内存是否申请成功
    {
        printf("顺序表初始化失败!\n");
        return NULL;
    }
    temp->data = (int* )malloc(sizeof(int) * 10);  //申请10个int大小的内存  
    temp->length = 0;
    temp->listsize = 10;
    printf("顺序表创建完成!\n");
    return temp;
}


int insertArray(Array * arr, int i, int n) //存放数据至顺序表中
{
    if (i<1 || i>arr->length + 1) //判断插入的位置是否合法, 只能按顺序插入,
        return 0;

    if (arr->length >= arr->listsize) //动态分配内存,如果空间已满申请更大的内存,用realloc在原本大小上扩容
    {
        arr->data = (int*)realloc(arr->data, (arr->listsize + 5) * sizeof(int));
    

    if (arr->data == NULL) return NULL;
    arr->listsize += 5;

    }
    int k;
    for (k = arr->length - 1; k >= i - 1; k--)
    {
        arr->data[k + 1] = arr->data[k];

    }    
    arr->data[i-1] = n;
    arr->length++;
    return 1;
}

void Show_Array(Array* arr) //打印顺序表中的元素
{
    if (arr->length == 0)
    {
        printf("顺序表为空!\n");
    }
    else
    {
        printf("顺序表中的元素为:");
        for (int i = 0; i < arr->length; i++)
        {        
            printf("%d ", arr->data[i]);

        }
        printf("\n");

    }
}


void Find_Ch_Array(Array* arr,int n) //查找顺序表中第n位置的元素值
{
    if (arr->data == NULL) 
        printf("顺序表为空!\n");
    if(arr->length<n)
        printf("没有存这么多的数据!\n");
    else
        printf("第%d个元素的值为:%d\n",n, arr->data[n - 1]);

}

void Set_Ch_Array(Array* arr, int n, int x)
{
    if (arr->data == NULL)
        printf("顺序表为空!\n");
    if (arr->length < n)
        printf("没有存这么多的数据!\n");
    else
        arr->data[n - 1] = x;
    printf("替换成功!\n");


}

void list_insert_arr(Array* arr,int n) //指定位置插入数据
{
if (arr->data == NULL)
printf("顺序表为空!\n");
if (arr->length < n)
printf("没有存这么多的数据!\n");
else
{
for (int i = 0; i < 10; i++)
{
int nun;
scanf("%d", &nun);
insertArray(arr, n+i, nun);


}


}
}

int main()
{
    Array* a=createArray();
    
    for (int i = 0; i < 50; i++)
    {

        insertArray(a, i, i + 10);

    }
    Show_Array(a);

    Find_Ch_Array(a, 5);




    system("pause");
    return 0;
}

 

posted @ 2020-03-13 00:21  神迹丶  阅读(207)  评论(0编辑  收藏  举报
网站已运行: