线性表
1. 概念
线性表:由同类型数据元素构成有序序列的线性结构
2.基本操作
- 初始化
- 查找某元素在线性表中的位置
- 查找某位置线性表的元素
- 某位置插入新元素
- 删除某位置的元素
线性表的顺序存储实现
顺序存储实现即相当于把数组封装成一种新的结构,包含存放数据的数组及统计当前线性表数据的个数。
本质还是数组
typedef struct node{
int Data[SIZE]; //存放数据的数组
int Last; //线性表的最后一个元素下标,last +1即为线性表元素个数
}List;
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
typedef struct node{
int Data[SIZE]; //存放数据的数组
int Last; //线性表的最后一个元素下标,last +1即为线性表元素个数
}List;
List* Makeempty_List(); //初始化线性表,返回为指向该线性表的指针
void Input_List(List *L,int n); //输入线性表元素 ,个数为n
void Onput_List(List *L); //遍历输出线性表元素
int Find_X_List(int x,List *L); //查找 X 第一次出现的下标
void Insert_List(int x,int i,List *L); //在下标为 i 的地方插入 X
void Delete_List(int i,List *L); //删除下标为 i 的元素
int FindKth_List(int K,List *L); //返回下标为 K的数据
int Length_List(List *L); //返回顺序表的长度
List* Makeempty_List()
{
List *L=(List*)malloc(sizeof(List));
L->Last=-1; //表示没有数据
return L;
}
void Input_List(List *L,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("\n输入第%d个数据:",i+1);
scanf("%d",&L->Data[i]);
}
L->Last=n-1;
}
void Onput_List(List *L)
{
int i;
for(i=0;i<=L->Last;i++)
printf("第%d个数据为%d\n",i+1,L->Data[i]);
}
int Find_X_List(int x,List *L)
{
int i=0;
while(i <= L->Last && L->Data[i] != x) //有两种跳出循环的方式
i++;
if(i>L->Last) //没找到返回 -1
return -1;
else //找到返回下标
return i;
}
void Insert_List(int x,int i,List *L) //在下标为 i 的地方插入 X
{
int j=0;
if(L->Last==SIZE-1)
{
printf("该线性表已满");
return ;
}
if(i>L->Last)
{
printf("插入位置不合法");
return ;
}
for(j=L->Last;j>=i;j--)
{
L->Data[j+1]=L->Data[j];
}
L->Data[i]=x;
L->Last++;
}
void Delete_List(int i,List *L) //删除下标为 i 的元素
{
int j;
if(i>L->Last||i<0)
{
printf("删除位置不合法");
return ;
}
for(j=i;j<L->Last;j++)
L->Data[j]=L->Data[j+1];
L->Last--;
}
int FindKth_List(int K,List *L) //返回下标为 K的数据
{
if(K<0||K>L->Last)
{
printf("不存在");
return ;
}
return L->Data[K];
}
int Length_List(List *L) //返回顺序表的长度
{
return L->Last;
}
void main()
{
int i,x;
int insert_x,insert_i;
int delate_i;
int find_i,data_i;
//创建及初始化
List *L=Makeempty_List();
printf("输入所要创建线性表内数据个数\n");
scanf("%d",&i);
Input_List(L,i);
Onput_List(L);
//插入
printf("输入插入位置及数据\n");
scanf("%d %d",&insert_i,&insert_x);
Insert_List(insert_x,insert_i-1,L);
Onput_List(L);
//查找第i个元素
printf("输入要查找的位置\n");
scanf("%d",&find_i);
data_i=FindKth_List(find_i,L);
printf("下标为%d的元素数据为:%d\n",find_i,data_i);
//删除
printf("输入删除位置\n");
scanf("%d",&delate_i);
Delete_List(delate_i-1,L);
Onput_List(L);
return;
//线性表长度
printf("线性表长度为:%d\n",Length_List(L));
}