欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言实现数据结构顺序存储

程序员文章站 2022-05-21 12:08:11
...

C语言实现数据结构顺序存储

// 头文件
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 10
//顺序存储结构  模仿数组的相关操作
typedef int DataType;
typedef struct
{
    DataType data[MAXSIZE];
    int length;

}SqList;
//增  删  查  改  排

void InitSqList(SqList *L);
void ShowSqList(SqList  *L);
void InsertSqList(SqList *L,int local,int val);//三个形参  一个需要知道线性表的首地址  另外需要知道要插入的位置以及插入的元素
void DeleteSqList(SqList *L,int local);//两个参数 一个是需要知道线性表的地址  另一个需要知道删除的位置是是什么
int SeekSqList(SqList *L,int num);//需要两个参数 一个是线性表的地址  另一个是返回值 也就是对应元素的位置 或者是下标

void main()
{
    SqList L; //使用指针的方式访问数组  L其实是一个SqList类型的变量 虽然定义了一个数组
    int local;
    InitSqList(&L);//初始化线性表 将线性表的长度置为 0
    //插入10个元素
    printf("初始数组:\n");
    ShowSqList(&L);
    for(local = 1;local <= MAXSIZE;local++)
    {
        InsertSqList(&L,local,local*10);
    }
    //遍历一下当前数组
    printf("\n插入元素后的数组:\n");
    ShowSqList(&L);

    DeleteSqList(&L,5);
    printf("\n删除后的数组:\n");
    ShowSqList(&L);
    printf("\n");

    local = SeekSqList(&L,80);
    printf("\n待查找元素的位置:local = %d\n",local);
}

void InitSqList(SqList * L)
{
    L->length = 0;
}

void ShowSqList(SqList *L)
{
    int i;
    for(i = 0; i < L->length;i++)
    {
        printf("%d\t",L->data[i]);
    }
}
void InsertSqList(SqList *L,int local,int val)//这里的local指的是位置  所以下标i = local - 1
{
    int j;
    int i;
    i = local - 1;
    //有两种情况不允许插入
    //第一种 数组满  不能再插入
    if(L->length == MAXSIZE)
    {
        printf("数组元素已满,不允许继续插入元素!");
        exit(1);
    }
    //第二种 插入的元素下标为负 或者是 插入元素的下标比当前数组长度要长
    else if(i < 0 || i > L->length)
    {
        printf("插入的位置不合法!");
        exit(1);
    }
    else
    {
        //首先将需要插入的位置空出来
        for(j = L->length - 1;j >= i;j--)
        {
            L->data[j + 1] = L->data[j];
        }
        L->data[i] = val;
        L->length++;
    }
}

void DeleteSqList(SqList *L,int local)
{
    int i = local - 1;
    int j;
    if(i < 1 || i > L->length)
    {
        printf("删除位置不合法!");
        exit(1);
    }
    else
    {
        //删除的思路是将要删除位置后面的元素依次向前移动 并且将数组长度-1
        for(j = i + 1;j < L->length;j++)
        {
            L->data[j-1] = L->data[j];
        }
        L->length--;
    }
}

int SeekSqList(SqList *L,int num)
{
    int temp;
    int i;
    for(i = 0; i < L->length;i++)
    {
        if(num == L->data[i])
        {
            temp = i;
            break;
        }
    }
    if(i == L->length)
    {
        printf("元素不存在!");
        exit(1);
    }
    return temp + 1;
}