顺序表的应用
问题描述
建立一个递增有序顺序表,实现将X插入到线性表的适当位置上,以保持线性表的有序性;实现插入、求表长以及输出该线性表。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MaxSize 20
/*
建立一个递增有序顺序表,实现将X插入到线性表的适当位置上,以保持线性表的有序性;实现插入、求表长以及输出该线性表。
*/
//定义线性表
typedef struct
{
int data[MaxSize];//用静态数组存放当前元素
int length;//数据表当前长度
}SeqList;//顺序表类型定义
//顺序表初始化
void InitList(SeqList& L)
{
L.length = 0;
}
//输入递增有序顺序表
void PutseqList(SeqList& L, int n)
{
for (int i = 0;i < n;i++)
{
scanf("%d", &(L.data[i]));//将输入的值存放到相应的地址中
L.length++;//每成功读取一个元素,顺序表长度加1
}
}
//求顺序表的表长
int LengthList(SeqList &L)
{
return L.length;
}
//判断插入位置
int PositionList(SeqList& L, int X)
{
for (int j = 0;j < L.length;j++)
{
if (X < L.data[j])//如果找到位置就返回地址,否则直到循环结束返回最后一个元素地址
{
return j + 1;//下标j代表第j+1个元素
}
}
return L.length + 1;//如果循环结束后仍未找到满足条件的插入位置,表示X应该插入顺序表末尾
}
//插入元素
bool InsertList(SeqList &L,int i,int e)
{
//判断i的范围是否有效
if (i<1 || i>L.length + 1)
{
printf("插入位置不合理");
return false;
}
//当前存储空间以满,无法插入
if (L.length>=MaxSize)
{
printf("表已满,无法插入");
return false;
}
//将第i个元素及之后的元素后移
for (int j = L.length;j >= i;j--)
{
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;//在位置i上放入要插入的元素e
L.length++;//长度加1
return true;
}
//输出元素
void OutputSeqList(SeqList& L)
{
printf("输出结果为:");
for (int i = 0;i < L.length;i++)
{
printf("%d ", L.data[i]);
}
printf("\n");
}
int main()
{
int s, c;
SeqList L;//声明一个顺序表
InitList(L);//初始化顺序表
printf("请输入顺序表长度:");
scanf("%d ", &s);
PutseqList(L, s);
LengthList(L);
printf("表长度为%d\n", LengthList(L));
printf("请输入要插入的元素:");
scanf("%d", &c);
InsertList(L, PositionList(L, c), c);
OutputSeqList(L);
return 0;
}