C 語言結構體指針實現數據的增刪改查

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//定義一個數據類型,該數據類型的名字叫做struct Arr 這個數據類型有三個成員
struct Arr
{
    int* pBase; //存儲的是數組第一個元素的地址
    int len;   //數組所能容納的最大元素個數
    int cnt;   //當前數組有效元素的個數
};
int get();
bool isEmpty(struct Arr* pArray)
{
    if (0 == pArray->cnt)
    {
        return true;
    }
    else
    {
        return false;
    }

};
bool isFull(struct Arr* pArray)
{
    if (pArray->cnt == pArray->len)
    {
        return true;
    }
    else
    {
        return false;
    }

};
int main()
{
    struct Arr arr;
    int val;

    initArr(&arr, 6);
    showArr(&arr);
    appendArr(&arr, 1);
    appendArr(&arr, 10);
    appendArr(&arr, -3);
    appendArr(&arr, 6);
    appendArr(&arr, 88);
    appendArr(&arr, 11);
    if (deleteArr(&arr, 4, &val))
    {
        printf("ɾ���ɹ�!\n");
        printf("��ɾ����Ԫ����: %d\n", val);
    }
    else
    {
        printf("ɾ��ʧ��!\n");
    }
    showArr(&arr);
    inversionArr(&arr);
    printf("����֮�������������:\n");
    showArr(&arr);
    sortArr(&arr);
    showArr(&arr);

    //printf("%d\n", arr.len);

    return 0;
}
void initArr(struct Arr* pArray, int length)//初始化結構體
{
    pArray->pBase = (int*)malloc(sizeof(int) * length);//給數組的第一個元素分配內存
    if (NULL == pArray->pBase)
    {
        printf("shibai");
        exit(-1);//終止
    }
    else
    {
        pArray->len = length;
        pArray->cnt = 0;
    }
    return;
}
void showArr(struct Arr* pArray)
{
    if (isEmpty(pArray))
    {
        printf("kogn");
    }
    else
    {
        for (int i = 0; i <= pArray->cnt - 1; i++)
        {
            printf("%d ", pArray->pBase[i]);
        }
        printf("\n");

    }
};
bool appendArr(struct Arr* pArray, int val)
{
    if (isFull(pArray))
    {
        return false;
    }
    else
    {
        pArray->pBase[pArray->cnt] = val;//這裏要注意,第一個索引是0,cnt表示有效數據個數
        (pArray->cnt)++;
    }
    return true;
};
bool insertArr(struct Arr* pArray, int pos, int val)
{
    if (isFull(pArray))
    {
        return false;
    }
    if (pos<1 || pos>pArray->cnt + 1)//第一個元素,但是索引是pos-1
    {
        return false;
    }
    for (int i = pArray->cnt - 1; i >= pos - 1; i--)
    {
    pArray->pBase[i + 1] = pArray->pBase[i];
    }
    pArray->pBase[pos - 1] = val;
    pArray->cnt++;
        return true;
};
bool deleteArr(struct Arr* pArray, int pos, int* pVal)
{
    if (pos<1 || pos>pArray->cnt)
    {
        return false;
    }
    if (isEmpty(pArray))
    {
        return false;
    }
    *pVal = pArray->pBase[pos - 1];//不知道爲什麼要這麼幹
    //下面這部分開始的時候寫錯了,還是要仔細分析一下
    for (int i = pos; i <= pArray->cnt; i++)
    {
        pArray->pBase[i - 1] = pArray->pBase[i];
    }
    pArray->cnt--;
    return true;
};
void sortArr(struct Arr* pArray)
{
    //冒泡
};
void inversionArr(struct Arr* pArray)
{
    int i = 0;
    int j = pArray->cnt - 1;
    int temp;
    while (i < j)
    {
        temp = pArray->pBase[i];
        pArray->pBase[i] = pArray->pBase[j];
        pArray->pBase[j] = temp;
        i++;
        j--;
    }

};

確定一個數組,需要三個有效參數
1.* pBase 首元素地址
2.len 總數組長度
3.cnt 有效數據長度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章