删除函数SeqList_delete
查找函数Sqlist_search
打印函数SLprint
- 一、 实验目的
- C语言上机调试线性表的基本方法;掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构上的运算,以及对相应算法的性能分析。
- 二、实验内容
-
编程实现如下功能:
(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。
(2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。
(3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。
(4)在顺序表中查找第i个元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。
-
三、实验思路及结果分析
-
首先,定义了一个结构体
SeqList
(在代码中通过typedef
给它起了一个别名SL
),它包含两个成员: -
int elem[N]
:一个整型数组,用于存储顺序表的元素。N
是顺序表的最大容量。 -
int size
:一个整型变量,表示顺序表当前存储的元素个数。 -
插入函数
Sqist_insert
- 参数:接收一个顺序表
l
、一个插入位置i
和一个要插入的元素x
。 - 功能:在顺序表的第
i
个元素后插入元素x
。如果插入位置不合法(i
小于1或大于l.size + 1
)或顺序表已满(l.size >= N
),则打印错误信息并返回原顺序表。否则,将插入位置及其后的元素后移一位,然后将x
插入到指定位置,并更新顺序表的大小。 - 参数:接收一个顺序表
l
和一个删除位置i
。 - 功能:删除顺序表的第
i
个元素。如果删除位置不合法(i
小于1或大于l.size + 1
),则打印错误信息并返回原顺序表。否则,将删除位置后的元素前移一位,并更新顺序表的大小。 - 参数:接收一个顺序表
l
和一个要查找的元素x
。 - 功能:在顺序表中查找元素
x
。如果找到,则返回元素在顺序表中的位置(位置从1开始计数)。如果未找到,则打印“查找失败”并返回0。 - 参数:接收一个顺序表
l
。 - 功能:遍历顺序表并打印其所有元素。
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N =50;
typedef struct SeqList
{
int elem[N];
int size;
}SL;
SL Sqist_insert(SL l,int i,int x){//插入
if (i < 1 || i > l.size + 1) {
cout << "ERROR!" << endl;
return l;
} else if (l.size >= N) {
cout << "ERROR!" << endl;
return l;
}
for (int j = l.size; j >= i; j--) {
l.elem[j] = l.elem[j - 1];
}
l.elem[i - 1] = x;
l.size++;
return l;
}
SL SeqList_delete(SL l,int i){//删除
if(i<1||i>l.size+1){
cout<<"ERROR!"<<endl;
return l;
}
else{
for(int j=i;j<=l.size-1;j++){
l.elem[j-1]=l.elem[j];
}
l.size--;
}
return l;
}
int Sqlist_search(SL l,int x){//查找
for (int i = 0; i < l.size; i++) {
if (l.elem[i] == x) {
return i + 1;
}
}
cout<<"查找失败"<<endl;
return 0;
}
void SLprint(SL l){//打印
for(int j=0;j<l.size;j++){
cout<<l.elem[j]<<" ";
}
cout<<endl;
}
int main(){
SL l={0};
int i,x;
cout<<"请输入顺序表的长度"<<endl;
cin>>l.size;
cout<<"请输入顺序表的元素"<<endl;
for(int j=0;j<l.size;j++){
cin>>l.elem[j];
}
cout<<"请输入在第i个元素后插入元素x"<<endl;
cin>>i;
cin>>x;
l= Sqist_insert(l,i,x);
SLprint(l);
cout<<"请输入删除第i个元素"<<endl;
cin>>i;
l= SeqList_delete(l,i);
SLprint(l);
cout<<"请输入想要查找的元素"<<endl;
cin>>x;
i= Sqlist_search(l,x);
if(i>0) {
printf("您查找的元素%d在第%d位", x, i);
printf("查找成功);
}
return 0;
}
运行结果: