线性表六六六

1.定义结构体

#include<stdio.h>
#include<stdlib.h>
#define MAX 10
typedef struct list
{
    int length;
    int data[MAX];
} *lists;

2.输出

void output(lists para)
{
    for (int i = 0; i <= para->length; i++)
    {
        printf("%d ", para->data[i]);
    }
}//输出元素

3.输出地址

void outputMemory(lists para)
{
    printf("para的地址是%p\n", para);
    printf("para的长度的地址是 % p\n", & para->length);
    printf("para的数据的地址是%p\n", & para->data[0]);
    printf("para的数据第二个元素的地址是%p\n", & para->data[1]);
}//输出内存

4.初始化

lists iniList(int para[], int paraLength)
{
    lists paras = (lists)malloc(sizeof(struct list));
    for (int i = 0; i < paraLength; i++)
    {
        paras->data[i] = para[i];
    }
    paras->length = paraLength;
    return paras;
}// 初始化

5.插入指定位置指定元素

void insertList(lists para, int position, int value)//插入
{
    if (position > para->length)
    {
        printf("无法插入\n");
    }
    if (position >= MAX)
    {
        printf("超出范围\n");
    }
    {
        printf("元素已满,无法插入\n");
    }
    if (position < 0)
    {
        printf("插入的位不能为负数\n");
    }
    for (int i = para->length; i > position; i--)
    {
        para->data[i] = para->data[i - 1];

    }
    para->data[position] = value;
    para->length++;
}
void insertTest()//插入运行
{
    int i;
    int tempArray[5] = { 3, 5, 2, 7, 4 };
    printf("测试开始----------\n");
    lists tempList = iniList( tempArray,5 );
    printf("After initialization, the list is: \n");
    output(tempList);
    printf("开始插入--------\n");
    {
        insertList(tempList, 0, 8);
    }
    output(tempList);

}

6.删除元素

int deleteElement(lists para, int position)
{
    int i = position;
    int value = para->data[position];
    if (position < 0)
    {
        printf("无效位置:%d\n", position);
        return -1;
    }
    if (position >= para->length)
    {
        printf("不能删除没有的数\n");
        return -1;
    }
    for (; i < para->length; i++)
    {
        para->data[i] = para->data[i + 1];
    }
    para->length--;
    return value;
}

7.定位

int locateElement(lists para, int value)
{
    for (int i = 0; i < para->length; i++)
    {
        if (para->data[i] == value)
        {
            return i;
        }
    }
    return -1;
}

8.给出位置求相应元素

int getElement(lists para, int position)
{
    if (position < 0)
    {
        printf("无效位置\n");
    }
    if (position >= para->length)
    {
        printf("无效数字\n");

    }
    return para->data[position];
}

9.清除链表

void clearList(lists para)
{
    para->length = 0;
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#define MAX 10
typedef struct list
{
    int length;
    int data[MAX];
} *lists;
void output(lists para)
{
    for (int i = 0; i <= para->length; i++)
    {
        printf("%d ", para->data[i]);
    }
}//输出元素
void outputMemory(lists para)
{
    printf("para的地址是%p\n", para);
    printf("para的长度的地址是 % p\n", & para->length);
    printf("para的数据的地址是%p\n", & para->data[0]);
    printf("para的数据第二个元素的地址是%p\n", & para->data[1]);
}//输出内存
lists iniList(int para[], int paraLength)
{
    lists paras = (lists)malloc(sizeof(struct list));
    for (int i = 0; i < paraLength; i++)
    {
        paras->data[i] = para[i];
    }
    paras->length = paraLength;
    return paras;
}// 初始化
void insertList(lists para, int position, int value)//插入
{
    if (position > para->length)
    {
        printf("无法插入\n");
    }
    if (position >= MAX)
    {
        printf("超出范围\n");
    }
    {
        printf("元素已满,无法插入\n");
    }
    if (position < 0)
    {
        printf("插入的位不能为负数\n");
    }
    for (int i = para->length; i > position; i--)
    {
        para->data[i] = para->data[i - 1];

    }
    para->data[position] = value;
    para->length++;
}
void insertTest()//插入运行
{
    int i;
    int tempArray[5] = { 3, 5, 2, 7, 4 };
    printf("测试开始----------\n");
    lists tempList = iniList( tempArray,5 );
    printf("After initialization, the list is: \n");
    output(tempList);
    printf("开始插入--------\n");
    {
        insertList(tempList, 0, 8);
    }
    output(tempList);

}
int deleteElement(lists para, int position)
{
    int i = position;
    int value = para->data[position];
    if (position < 0)
    {
        printf("无效位置:%d\n", position);
        return -1;
    }
    if (position >= para->length)
    {
        printf("不能删除没有的数\n");
        return -1;
    }
    for (; i < para->length; i++)
    {
        para->data[i] = para->data[i + 1];
    }
    para->length--;
    return value;
}
void deleteTest()
{
    int tempArray[5] = { 3, 5, 2, 7, 4 };
    lists tempList = iniList(tempArray, 5);
    printf("初始化后是 \n");
    output(tempList);
    printf("删除之3后是 \n");
    deleteElement(tempList, 3);
    output(tempList);
    outputMemory(tempList);
}
int locateElement(lists para, int value)
{
    for (int i = 0; i < para->length; i++)
    {
        if (para->data[i] == value)
        {
            return i;
        }
    }
    return -1;
}
int getElement(lists para, int position)
{
    if (position < 0)
    {
        printf("无效位置\n");
    }
    if (position >= para->length)
    {
        printf("无效数字\n");

    }
    return para->data[position];
}
void clearList(lists para)
{
    para->length = 0;
}
void main()
{
    insertTest();
    deleteTest();
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值