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

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;
}

你可能感兴趣的:(数据结构-C,随笔)