IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [C语言、C++]数据结构作业:线性表-顺序表的基本操作 -> 正文阅读

[C++知识库][C语言、C++]数据结构作业:线性表-顺序表的基本操作

实现顺序表的结构定义基本操作并进行测试。

基本操作为:

初始化,在某编号节点插入元素,删除编号为某节点的元素并返回该元素,取某编号节点,遍历顺序表,清空顺序表,销毁顺序表,顺序表中查找某个值的元素的编号,

------------------

要求:

main中:

1)声明一个顺序表,初始化

2)在该顺序表中插入1,2,3,4,5,每次均在编号1处

3)遍历

4)在编号6插入6

5)分别查找并打印5,6,2这三个元素及其位置

6)在编号2插入7,8,9,10,11

7)遍历

8)删除第一个位置的元素,并打印该元素

9)删除第一个位置的元素,并打印该元素

10)遍历

11)删除第编号为9的元素,并打印该元素,打印此时顺序表长度

12)遍历

13)清空顺序表并打印顺序表长度

14)在第2编号处插入10,结果插入成功,打印“成功插入”,否则打印“插入不成功”

15)依次插入1,2,3,4,5,每次均在最后一个结点的后一个位置处

16)遍历

17)销毁顺序表

#include <iostream>
using namespace std;
typedef int ElemType;
typedef int Status;
#define MAXSIZE 100
#define INITSIZE 100
#define OK 1
#define ERROR 0
typedef struct {
    ElemType* elem;         //存储空间的基地址
    int length;             //当前长度
    int listsize;
} SqList;                   //顺序表的结构类型为SqList
Status InitList(SqList& L) {//分配
    L.elem = new ElemType[INITSIZE];
    if (!L.elem) {
        cout << "存储分配失败!" << endl;
        exit(1);
        return ERROR;
    }
    L.length = 0; L.listsize = INITSIZE;
}   
Status Listinsert(SqList& L, int i, ElemType e){//插入函数
    if (i < 1 || i > L.length + 1) return ERROR;
    if (L.length >= L.listsize) return ERROR;//老师说ListExtend()可以先不写
    //移动元素,对i=L.length+1,无须移动
    for (int j = L.length - 1; j >= i - 1; j--)
        L.elem[j + 1] = L.elem[j];
    L.elem[i - 1] = e; //实际插在数组第i-1个位置
    L.length++;
    return OK;
}
Status ListDelete(SqList& L, int i) {//删除函数
    int e;
    if ((i < 1) || (i > L.length)) {
        return ERROR;                               //i值不合法
    }
    e = L.elem[i - 1];
    for (int j = i; j <= L.length - 1; j++) {
        L.elem[j - 1] = L.elem[j];                    //被删除元素之后的元素前移
    }
    printf("被删除的元素为%d\n", e);
    --L.length;                                     //表长减 1
    return OK;
}
Status printList(SqList L)//遍历打印
{
    if (L.length == 0)
    {
        printf("线性表为空\n");
        return 0;
    }
    int i;
    for (i = 0; i < L.length; i++)
    {
        printf("编号为%d,元素值:elem[%d]=%d\n",i+1, i,L.elem[i]);
    }
    printf("\n");
    return OK;
}
Status LocateELem(SqList L, ElemType e) {
    //在顺序表中查找值为e的数据元素, 返回其序号
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e){
        return i + 1;           //查找成功, 返回序号 i+l
        }
    }
    return ERROR;                       //查找失败, 返回 0           
}
void ClearList(SqList& L)   //清空线性表
{
    L.length = 0;
}
Status Getlength(SqList L){
    return L.length;
}
void DestroyList_Sq(SqList& L)   //销毁线性表
{
    free(L.elem);
    L.elem = NULL;
    L.length = 0;
    L.listsize = 0;
}
int main() {
    SqList lists;
    InitList(lists);//1)声明一个顺序表,初始化
    for (int i = 1; i <= 6; i++) {//2)在该顺序表中插入1,2,3,4,5,每次均在编号1处
        Listinsert(lists, 1, i);
    }
    printList(lists);//3)遍历
    Listinsert(lists, 6, 6);//4)在编号6插入6
    printf("元素 5 的位置是%d\n",LocateELem(lists, 5));//5)分别查找并打印5,6,2这三个元素及其位置
    printf("元素 6 的位置是%d\n",LocateELem(lists, 6));
    printf("元素 2 的位置是%d\n",LocateELem(lists, 2));
    for (int i = 7; i <= 11; i++) {//6)在编号2插入7,8,9,10,11
        Listinsert(lists, 2, i);
    }
    printList(lists);//7)遍历
    ListDelete(lists, 1);//8)删除第一个位置的元素,并打印该元素
    ListDelete(lists, 1);//9)删除第一个位置的元素,并打印该元素
    printList(lists);//遍历
    ListDelete(lists, 9);//11)删除第编号为9的元素,并打印该元素,
    printf("此时表的长度为%d\n",Getlength(lists));//打印此时顺序表长度
    printList(lists);//12)遍历
    ClearList(lists); //13)清空顺序表
    printf("此时表的长度为%d\n", Getlength(lists));//13)并打印顺序表长度
    if (Listinsert(lists, 2, 10)) {//14)在第2编号处插入10,结果插入成功,打印“成功插入”,否则打印“插入不成功”
        printf("成功插入\n");//结果插入成功,打印“成功插入”
    }
    else {
        printf("插入不成功\n");//否则打印“插入不成功
    }
    for (int i = 1; i <= 5; i++) {//15)依次插入1,2,3,4,5,每次均在最后一个结点的后一个位置处
        Listinsert(lists, Getlength(lists)+1, i); 
    }
    printList(lists);//16)遍历
    DestroyList_Sq(lists);//17)销毁顺序表
    printf("线性表已销毁!");
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:08:17  更:2022-09-21 00:08:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 14:51:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码