【数据结构】实验一 顺序表的基本操作

时间:2024-11-15 07:38:14

删除函数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;
}

运行结果:

相关文章