数据结构——创建顺序表

一、实验目的

1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。
2、巩固 C++相关的程序设计方法与技术。
3、学会使用顺序表解决实际问题。
二、实验内容

1、顺序表的建立与操作实现
建立n个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。
三、实验步骤

主程序

Created with Raphaël 2.1.0开始添加结点顺序表是否满?显示所有结点功能结束是否继续添加yesnoyesno

功能:
1. 添加结点
2. 显示结点
3. 插入结点
4. 查找结点
5. 删除结点

四、实现代码
1、类定义

struct Xinxi//struct数据表要用的结构
{
    string StudentID;//学号.字符串类型
    string name;//名字
    int age;//年龄
};
struct SLType //顺序表结构
{
    Xinxi LisXinxi[LEN + 1];//保存顺序表的结构 数组
    int ListLen;//保存点数量
};

2、顺序表的功能

①初始化顺序表

void SLRe(SLType *SL)////初始化顺序表,定义结构体指针 SL
{
    SL->ListLen = 0;//初始化结点数量
}

②结点数量

int SLLenght(SLType *SL)
{
    return(SL->ListLen);//返回结点数量
}

③添加结点

int SLAdd(SLType *SL, Xinxi xinxi)//添加结点
{
    if (SL->ListLen >= LEN)//若超过最大长度
    {
        cout << "顺序表已满,添加失败" << endl;
        return 0;//不再返回值
    }
    SL->LisXinxi[++SL->ListLen] = xinxi;//从1开始添加,每次添加都加1
    return 1;
}

④插入结点

int SLInsert(SLType *SL, int n, Xinxi xinxi)//插入结点
{
    int i;
    if (SL->ListLen >= LEN)//若超过最大长度
    {
        cout << "顺序表已满,添加失败" << endl;
        return 0;//不再返回值
    }
    if (n<1 || n>SL->ListLen)//插入结点的序号要大于0小于最大长度
    {
        cout << "序号输入错误" << endl;
        return 0;
    }
    for (i = SL->ListLen; i >= n; i--)
    {
        SL->LisXinxi[i + 1] = SL->LisXinxi[i];//将顺序表中的数据向后移动
    }
    SL->LisXinxi[n] = xinxi;
    SL->ListLen++;////顺序表结点数量+1
    return 1;
}

⑤删除结点

int SLDelete(SLType *SL, int n)//删除结点
{
    int i;
    if (n<1 || n>SL->ListLen)//判断
    {
        cout << "序号输入错误" << endl;
        return 0;
    }
    for (i = n; i < SL->ListLen; i++)
    {
        SL->LisXinxi[i] = SL->LisXinxi[i + 1];//将数据表数据向前移
    }
    SL->ListLen--;///顺序表结点数量-1
    return 1;
}

⑥查找结点

Xinxi * SLFind(SLType *SL, int n)//根据序号查找结点
{
    if (n<1 || n>SL->ListLen)
    {
        cout << "序号输入错误" << endl;
        return 0;
    }
    return &(SL->LisXinxi[n]);//指针返值
}

⑦ 显示所有结点

void SLAll(SLType *SL)//显示所有结点
{
    int i;
    for (i = 1; i <= SL->ListLen; i++)
    {
        cout << "学号:" << SL->LisXinxi[i].StudentID << ",名字:" << SL->LisXinxi[i].name << ",age:" << SL->LisXinxi[i].age << endl;
    }//循环逐个显示
}

3、主函数

int main()
{
    int i;
    int b;
    SLType SL;
    Xinxi xinxi;
    Xinxi *pxinxi;
    string name;
    cout << "*********顺序表*********\n" << endl;
    SLRe(&SL);//初始化
    do//添加结点
    {
        cout << "学号 姓名 年龄 :";
        cin >> xinxi.StudentID >> xinxi.name >> xinxi.age;//输入数据
        cout << "按1继续添加,0退出 : ";
        cin >> b;
        if (!b)
        {
            break;
        }
        if (xinxi.age)// 年龄不为0
        {
            if (!SLAdd(&SL, xinxi))//结点满了
            {
                break; //退出循环
            }
        }
        else
        {
            break;
        }
    } while (1);
    cout << "顺序表中的结点为: " << endl;
    SLAll(&SL); //显示结点
    cout << "请输入要查找的结点序号:";
    cin >> i;
    pxinxi = SLFind(&SL, i);
    if (pxinxi)
    {
        cout << "第" << i << "个结点为:学号" << pxinxi->StudentID << ",名字" << pxinxi->name << ",年龄" << pxinxi->age << endl;
    }
    cout << "请输入您要删除的结点的序号:";
    cin >> i;
    if (SLDelete(&SL, i))
    {
        cout << "数据删除成功" << endl;
        SLAll(&SL);
    }
    return 0;
}

因为时间关系(其实是偷懒,我就没有把数据插入的功能写进主函数里了)

完整代码

#include <stdio.h>
#include<iostream>
#include<string>
using namespace std; //使用标准库,防重复
#define LEN 10 //顺序表长度
                     /********类定义*******/
struct Xinxi//struct数据表要用的结构
{
    string StudentID;//学号.字符串类型
    string name;//名字
    int age;//年龄
};
struct SLType //顺序表结构
{
    Xinxi LisXinxi[LEN + 1];//保存顺序表的结构 数组
    int ListLen;//保存点数量
};
/**********顺序表功能***************/
void SLRe(SLType *SL)////初始化顺序表,定义结构体指针 SL
{
    SL->ListLen = 0;//初始化结点数量
}
int SLLenght(SLType *SL)
{
    return(SL->ListLen);//返回结点数量
}
int SLAdd(SLType *SL, Xinxi xinxi)//添加结点
{
    if (SL->ListLen >= LEN)//若超过最大长度
    {
        cout << "顺序表已满,添加失败" << endl;
        return 0;//不再返回值
    }
    SL->LisXinxi[++SL->ListLen] = xinxi;//从1开始添加,每次添加都加1
    return 1;
}
int SLInsert(SLType *SL, int n, Xinxi xinxi)//插入结点
{
    int i;
    if (SL->ListLen >= LEN)//若超过最大长度
    {
        cout << "顺序表已满,添加失败" << endl;
        return 0;//不再返回值
    }
    if (n<1 || n>SL->ListLen)//插入结点的序号要大于0小于最大长度
    {
        cout << "序号输入错误" << endl;
        return 0;
    }
    for (i = SL->ListLen; i >= n; i--)
    {
        SL->LisXinxi[i + 1] = SL->LisXinxi[i];//将顺序表中的数据向后移动
    }
    SL->LisXinxi[n] = xinxi;
    SL->ListLen++;////顺序表结点数量+1
    return 1;
}
int SLDelete(SLType *SL, int n)//删除结点
{
    int i;
    if (n<1 || n>SL->ListLen)//判断
    {
        cout << "序号输入错误" << endl;
        return 0;
    }
    for (i = n; i < SL->ListLen; i++)
    {
        SL->LisXinxi[i] = SL->LisXinxi[i + 1];//将数据表数据向前移
    }
    SL->ListLen--;///顺序表结点数量-1
    return 1;
}
Xinxi * SLFind(SLType *SL, int n)//根据序号查找结点
{
    if (n<1 || n>SL->ListLen)
    {
        cout << "序号输入错误" << endl;
        return 0;
    }
    return &(SL->LisXinxi[n]);//指针返值
}
void SLAll(SLType *SL)//显示所有结点
{
    int i;
    for (i = 1; i <= SL->ListLen; i++)
    {
        cout << "学号:" << SL->LisXinxi[i].StudentID << ",名字:" << SL->LisXinxi[i].name << ",age:" << SL->LisXinxi[i].age << endl;
    }//循环逐个显示
}
/*******主函数********/
int main()
{
    int i;
    int b;
    SLType SL;
    Xinxi xinxi;
    Xinxi *pxinxi;
    string name;
    cout << "*********顺序表*********\n" << endl;
    SLRe(&SL);//初始化
    do//添加结点
    {
        cout << "学号 姓名 年龄 :";
        cin >> xinxi.StudentID >> xinxi.name >> xinxi.age;//输入数据
        cout << "按1继续添加,0退出 : ";
        cin >> b;
        if (!b)
        {
            break;
        }
        if (xinxi.age)// 年龄不为0
        {
            if (!SLAdd(&SL, xinxi))//结点满了
            {
                break; //退出循环
            }
        }
        else
        {
            break;
        }
    } while (1);
    cout << "顺序表中的结点为: " << endl;
    SLAll(&SL); //显示结点
    cout << "请输入要取出的结点序号:";
    cin >> i;
    pxinxi = SLFind(&SL, i);
    if (pxinxi)
    {
        cout << "第" << i << "个结点为:学号" << pxinxi->StudentID << ",名字" << pxinxi->name << ",年龄" << pxinxi->age << endl;
    }
    cout << "请输入您要删除的结点的序号:";
    cin >> i;
    if (SLDelete(&SL, i))
    {
        cout << "数据删除成功" << endl;
        SLAll(&SL);
    }
    return 0;
}

本来没想到用指针来实现大部分功能的,不过因为数据表适合用指针来做,而且看到很多人都是用指针来写所以也就借鉴了,本来对指针很陌生的我写完这个程序后熟悉了很多。写得不算太好,有点偷工减料(没有列成一个选项来让人选)。

### Google AI Editor Jules 简介 Google AI Editor Jules谷歌推出的一款基于人工智能技术的文本编辑工具,旨在帮助用户更高效地进行文档创作、校对和优化。它利用自然语言处理(NLP)技术,提供实时语法检查、风格改进建议以及内容生成支持[^1]。此外,Jules 还能够根据用户的写作风格提供建议,从而提升文档的专业性和可读性。 ### 功能概述 #### 1. 实时语法与拼写检查 Jules 提供了强大的实时语法和拼写检查功能,可以快速识别并修正常见的语言错误。这些功能不仅限于简单的拼写问题,还包括复杂的句子结构分析和语义理解[^2]。 #### 2. 写作风格优化 除了基本的语法修正外,Jules 还能分析文本的语气、复杂度和一致性,并给出具体的改进意见。例如,它可以帮助用户将过于正式的文本调整为更亲切的风格,或者反之[^3]。 #### 3. 内容生成与扩展 对于需要撰写较长文档的用户,Jules 可以根据提供的段落或主题自动生成相关内容。这种功能特别适用于撰写文章、报告或邮件等场景[^4]。 #### 4. 多语言支持 Jules 支持多种语言的文本编辑,包括但不限于英语、法语、西班牙语和中文。这使得全球范围内的用户都能从中受益[^5]。 ### 使用指南 #### 安装与配置 - 用户可以通过谷歌的应用商店下载并安装 Jules 编辑器。 - 首次启动时,用户需要登录其谷歌账户以同步个人偏好设置和历史记录[^6]。 #### 基本操作 - 打开 Jules 后,用户可以直接输入文本,工具会自动开始分析并提供建议。 - 在界面右侧或底部,用户可以看到详细的修改建议列表,点击即可应用更改[^7]。 #### 高级功能 - **个性化设置**:用户可以根据自己的需求调整 Jules 的敏感度,例如选择严格模式或宽松模式。 - **插件集成**:Jules 支持与其他生产力工具(如 Google Docs 和 Gmail)无缝集成,方便用户在不同平台间切换使用[^8]。 ```python # 示例代码:通过 API 调用 Jules 的内容生成功能 import google_ai_editor_jules as jules def generate_content(prompt): response = jules.generate(prompt) return response['text'] prompt = "请为一篇关于人工智能的文章生成开头段落" generated_text = generate_content(prompt) print(generated_text) ``` ### 注意事项 尽管 Jules 功能强大,但在某些情况下仍可能无法完全替代人类的判断力。因此,建议用户在使用过程中结合自身经验对生成的内容进行最终审核[^9]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值