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