顺序表的代码实现(C语言)从0--->1(动态顺序表)

发布于:2022-12-07 ⋅ 阅读:(954) ⋅ 点赞:(0)

为方便以后继续完善下面代码可直接复制以及对应的图片便于观看

一:为了方便先自己定义头文件

#pragma once
#define InitSize 10
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
    int* date;
    int MaxSize;
    int len;
}list;
//初始化
void InitList(list* L);

//增加动态数组长度;
void IncreaseSize(list* L);
//数据插入
void InsretList(list* L, int i, int e);
//数据的删除
int Delate(list* L, int i);//返回被删除的数据
//按位查找
int GetElem(list L, int i);
//按值查找
int VulueElem(list* L, int vulue);//返回位置
//打印
void print(list L);
 

二:具体代码实现:为方便以后继续完善下面代码可直接复制以及对应的图片便于观看

#include"1.h"

//顺序表的初始化
void Initlist(list* L)
{
    int i = 0;
    L->date = (int*)malloc(sizeof(int) * InitSize);
    if (L->date == NULL)
    {
        printf("开辟失败");
        return;
    }
    for (i = 0; i < InitSize; i++)
    {
        L->date[i] = i;
        L->len=i+1;
    }
    L->MaxSize = InitSize;
}
//数组长度
void IncreaseList(list* L)
{
    if (L->len == L->MaxSize)
    {
        int i;
        int* P = L->date;//将date里面的数据存起来
        L->date = (int*)malloc(sizeof(int) * (L->MaxSize+L->len));//重新开辟空间
        //将存起来的数据重新导入L->date中;
        if (L->date == NULL)
        {
            printf("开辟空间失败\n");
            return;
        }
        for (i = 0; i < L->len ;i++)
        {
            L->date[i] = P[i];
        }
        L->MaxSize = L->MaxSize + L->len;
        free(P);
    }
    else
    {
        return;
    }
}
//插入
void InsertList(list* L, int i, int e)
{
    IncreaseList(L);
    if (i<1 || i>L->len)
    {
        printf("插入失败:\n");
        return;
    }
    else
    {
        int j;
        for (j = L->len; j >= i-1; j--)
        {
            L->date[j + 1] = L->date[j];
        }
        L->date[i-1] = e;
        L->len++;
    }

}
//按位删除
int Delate(list* L, int i)//返回删除的值
{
    if (i<1 || i>L->len)
    {
        return 0;
    }
    int j = L->date[i-1];//将删除的值存起来
    for (i; i <= L->len; i++)
    {
        L->date[i-1] = L->date[i ];
    }
    L->len--;
    return j;
}
//按位查找返回对应的值
int GetElem(list L,int i)
{
    return L.date[i - 1];
}
//按值查找返回对应的位置
int VulueElem(list L, int vulue)
{
    int i;
    for (i = 0; i < L.len; i++)
    {
        if (L.date[i] == vulue)
            return i + 1;

    }
    return 0;
}

//打印
void print(list L)
{
    int i=0;
    for(i=0;i<L.len;i++)
    {
        printf("%5d", L.date[i]);
    }
    printf("\n");
}
int main()
{
    list L;
    Initlist(&L);
    printf("初始化的数据1为:\n");
    print(L);
    printf("插入后的数据为:\n");
    InsertList(&L, 5, 20);
    print(L);
    int j=Delate(&L, 6);
    printf("删除的值为:%d\n", j);
    print(L);
    int k=GetElem(L,3);
    printf("第三个元素为:%d\n", k);
    printf("值为5的元素为第%d个\n", VulueElem(L,5));
    return 0;

}

 

 三:代码执行结果

 


网站公告

今日签到

点亮在社区的每一天
去签到