顺序表功能的基本实现

Posted dkbob

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表功能的基本实现相关的知识,希望对你有一定的参考价值。

 

 

 

声明:本人刚接触数据结构,现在在自学中,写博客是一种总结,也给大家参考一下,代码有错,大家可以指出批评。

 

注意事项:该实现顺序表运用的是c++,其中包含c++的&应用符号 c语言运用指针*。

 

程序思想:

 

1:代码整体框架

 

2:编写思想

 

3:算法分析

 

4:代码实现

 

 

 

#include<iostream>
using namespace std;
#define N 100
typedef struct student
{

 

    int age[N];
    string name[N];
    int length;

 

}sqlist;

 

void initiallist(sqlist& l)
{
    l.length = 0;
    cout << "顺序表初始化成功" << endl;
}//顺序表初始化

 

void listisempty(sqlist& l)
{
    if (!l.length)
    {
        cout << "该表是空表" << endl;
    }
    else cout << "该表不是空表" << endl;
}//判断顺序表是否为空

 

void listfull(sqlist& l,int t)
{
    int i;

 

    cout << endl << "现在开始录入数据" << endl;
    for (i = 0; i < t; i++)
    {
        cout << "请输入第" << i << "个学生的姓名" << endl;
        cin >> l.name[i];
        cout << "请输入第" << i << "个学生的年龄" << endl;
        cin >> l.age[i];
        l.length++;
    }
}//顺序表的录入

 


void getelem(sqlist& l)
{
    int i;
    cout << "请输入数据位置" << endl;
    cin >> i;
    if (i < 0 || i > l.length - 1)
        cout << "error" << endl;
    else
        cout << "姓名为" << l.name[i ] << "年龄为" << l.age[i ] << endl;
}//输出第i个元素包含的内容

 

void  outputlist(sqlist& l)
{
    int i;
    for (i = 0; i < l.length; i++)
    {
        cout << "第" << i << "个同学的信息如下:" << \'\\t\' << endl;
        cout << l.name[i] << l.age[i] << endl;
    }
}//顺序表里的数据输出

 

int listlength(sqlist& l)
{
    return l.length;
}//返回顺序表当前长度

 

void listdelete(sqlist& l)//删除第i位置的元素
{
    int i;
    cout << "请输入删除元素的位置" << endl;
    cin >> i;
    if (i < 0 || i > l.length - 1)
        cout << "false" << endl;
    else
    {
        for (int j = i; j < l.length; j++)//遍历到顺序表最后t,全部向前移动
        {
            l.age[j] = l.age[j + 1];
            l.name[j] = l.name[j + 1];
        }
        l.length--;
    }
    return ;
}//顺序表的删除

 

void listfind(sqlist& l)
{
    int i; string fnm;
    cout << "请输入同学的名字" << endl;
    cin >> fnm;
    for (i = 0; i < l.length; i++)
    {
        if (l.name[i] == fnm)
        {
            cout << "找到该同学" << "信息如下" << endl;
            cout << "年龄为" << l.age[i] << \'\\t\' << "表中的位置是" << i << endl;
            return;
        }
    }
    cout << "没有找到该同学,可能名字出错,可能没有此人,请检查" << endl;
            return;

 

    }
//顺序表的查找

 


    sqlist insertbf(sqlist & l)
    {
        int t, b, i;
        string nm;
        cout << "请输入你要插入数据的位置" << endl;
        cin >> b;
        if (l.length == N)
        {
            cout << "error" << endl;
            return l;
        }
        if (b< 0 || b>l.length )
        {
            cout << "error" << endl;
            return l;
        }
            for (t = l.length; t>b;t--)
            {
                l.age[t] = l.age[t-1];
                l.name[t] = l.name[t-1 ];
            }//从j开始向后移动
            ++l.length;
        cout << "请输入插入同学的名字" << endl;
        cin >> nm;
        cout << "请输入插入同学的年龄" << endl;
        cin >> i;
        l.name[b ] = nm;
        l.age[b] = i;
        

 

    //因为插入元素表长加1
    return l;
}//在指定位置插入数据

 

void listfindput(sqlist& l)
{
    string fnm;
    cout << "请输入你要查找同学的名字" << endl;
    cin >> fnm;
    for (int i = 0; i < l.length; i++)
    {
        if (l.name[i] == fnm)
        {
            cout << "找到该同学的位置是" << i << endl;
            return;
        }
    }
    cout << "没有找到该同学" << "可能名字输错" << endl;
    return;
}//输出某个元素的位置

 

void insertleast(sqlist &l)
{
    int a;
    string nm;
    if (l.length == N)
    {
        cout << "表满了不能插入数据了" << endl;
        return;
    }
    else
    {
        cout << "请输入同学的名字" << endl;
        cin >> nm;
        cout << "请输入同学的年龄" << endl;
        cin >> a;
        l.age[l.length] = a;
        l.name[l.length] = nm;
    }
        l.length++;
        return;
}//表最后插入数据

 

void listreplace(sqlist& l)
{
    int age; string nm, fnm;
    cout << "请输入你要查找同学的名字" << endl;
    cin >> fnm;
    for (int i = 0; i < l.length; i++)
    {
        if (l.name[i] == fnm)
        {
            
            cout << "请输入修改的名字为" << endl;
            cin >> nm;
            cout << "输入修改的年龄为" << endl;
            cin >> age;
            l.age[i] = age;
            l.name[i] = nm;
        }
    }
    return ;
}//顺序表数据的替换/修改

 


void deletelist(sqlist& l)
{
    l.length = 0;
    cout << "顺序表清空" << endl;
    cout << "顺序表的长度为" << l.length << endl;
    return;
}//顺序表清空,顺序表长度为0.

 

int main()
{
    int a, t;
    sqlist l;
    student c;
    string fnm;
    cout << "请输入选项前数字进行顺序表的操作" << endl;
    cout << "1.顺序表初始化" << \'\\t\' << "2.判断是否为空表" << \'\\t\' << "3.顺序表的输入" << endl;
    cout << "4.全表的输出" << \'\\t\' << "5.求全表的长度" << endl;
    cout << "6.输入序号删除元素" << \'\\t\' << "7.用名字查找某个同学的序号" << endl;
    cout << "8.用同学名字查找其信息" << \'\\t\' << "9.用学生序号查找学生的信息" << endl;
    cout << "10.将顺序表里面某个同学信息换成他人" << \'\\t\' << "11.在顺序表插入指定的位置" << endl;
    cout << "12.在顺序表最后一个位置位置插入" << \'\\t\' << "13.链表清空" << endl;
    cin >> a;
    while (1)
    {

 

        switch (a)
        {
        case 1:initiallist(l); break;//顺序表初始化

 

        case 2:listisempty(l); break;//判断顺序表是不是空表

 

        case 3:cout << "请输入你要输入学生的个数" << endl;
            cin >> t; listfull(l,t); break;//全表输入

 

        case 4:outputlist(l); break;//全表输出

 

        case 5:cout << "顺序表长度为" << listlength(l) << endl; break;//顺序表的长度

 

        case 6:
             listdelete(l); break;//删除顺序表的元素

 

        case 7:

 

            listfindput(l); break;//用某个同学名字查找其序号

 

        case 8:

 

            listfind(l); break;//用某个同学的名字查找其信息

 

        case 9:
            
            getelem(l); break;

 

        case 10:

 

             listreplace(l); break;//将顺序表里面的某个同学的所有信息换成别人

 

        case 11: 
             l=insertbf(l);break;//数据前一个位置插入
        
        case 12:   
            insertleast(l);    break;//表最后插入数据

 

        case 13:
            deletelist(l); break;//链表清空
        }
        cout << "退出请输入0" << endl;
        cin >> a;
        if (a == 0)
            break;
        else
        {
            cout << "请输入选项前数字继续进行顺序表的操作" << endl;
        }
    }
    cout << "欢迎你的使用" << endl;
    return 0;
}
————————————————
版权声明:本文为CSDN博主「weixin_52913841」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52913841/article/details/117148566

 

以上是关于顺序表功能的基本实现的主要内容,如果未能解决你的问题,请参考以下文章

顺序表功能的基本实现

顺序表上基本运算的实现

Java语言描述顺序表类,顺序表类的基本操作实现

顺序表基本操作

顺序表(C++实现)

大厂算法系列编码手写顺序表相关功能,线性结构核心知识点详细剖析