C++顺序表实验

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 C++顺序表实验,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

以顺序表为例,设计一个主程序完成如下功能:

1)初始化顺序表L
2)依次插入a,b,c,d,e元素
3)输出L的长度
4)判断L是否为空
5)输出L的第3个元素
6)输出元素b的位置

运行结果如图所示:
在这里插入图片描述

完整代码

#include <iostream>
#include <stdio.h>
#include <malloc.h>

#define MaxSize 50
typedef char ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

/**
 * 初始化顺序表
 * @param L 链表
 */
void InitList(SqList *&L) {
    L = (SqList *) malloc(sizeof(SqList));
    L->length = 0;
}

/**
 * 释放顺序表
 * @param L 链表
 */
void DestroyList(SqList *L) {
    free(L);
}

/**
 * 判断顺序表是否为空
 * @param L 顺序表
 * @return 顺序表是否为空
 */
int ListEmpty(SqList *L) {
    return (L->length == 0);
}

/**
 * 顺序表的长度
 * @param L  顺序表
 * @return 顺序表的长度
 */
int ListLength(SqList *L) {
    return (L->length);
}


/**
 * 打印顺序表
 * @param L  顺序表
 */
void DispList(SqList *L) {
    int i;
    if (ListEmpty(L)) return;
    for (i = 0; i < L->length; i++)
        printf("%c", L->data[i]); //???
    printf("\n");
}

/**
 * 获取顺序表中的指定元素
 * @param L 顺序表
 * @param i 索引
 * @param e 通过给e赋值 找到指定的元素
 * @return 返回是否找到
 */
int GetElem(SqList *L, int i, ElemType &e) {
    if (i < 1 || i > L->length)
        return 0;
    e = L->data[i]; // 通过给e赋值来获取指定的元素
    return 1;
}

/**
 * 定位元素
 * @param L 顺序表
 * @param e 元素
 * @return 是否找到
 */
int LocateElem(SqList *L, ElemType e) {
    int i = 0;
    while (i < L->length && L->data[i] != e) i++;
    if (i >= L->length)
        return 0;
    else
        return i + 1;
}

/**
 * 顺序表的插入
 * @param L  顺序表
 * @param i 索引
 * @param e 元素
 * @return 是否插入
 */
int ListInsert(SqList *L, int i, ElemType e) {
    int j;
    if (i < 1 || i > L->length + 1) {
        return 0;
    }

    i--;                            //将顺序表位序转化为elem下标
    for (j = L->length; j > i; j--)        //将data[i]及后面元素后移一个位置
        L->data[j] = L->data[j - 1]; // 元素后移
    L->data[i] = e; //新元素赋值
    L->length++;   //顺序表长度增1
    return 1;
}

/**
 * 顺序表的删除
 * @param L 顺序表
 * @param i 索引
 * @param e  元素
 * @return 是否删除
 */
int ListDelete(SqList *L, int i, ElemType &e) {
    int j;
    if (i < 1 || i > L->length)
        return 0;
    i--;                            //将顺序表位序转化为elem下标
    e = L->data[i];
    for (j = i; j < L->length - 1; j++)
        L->data[j] = L->data[j + 1]; // 元素前移
    L->length--;
    return 1;
}

int main() {
    std::cout << "Hello666, World!" << std::endl;
    SqList *L;
    ElemType elemType;
    printf("(1) 初始化顺序表\n");
    InitList(L);

    printf("(2) 依次插入a,b,c,d,e元素\n");
    ListInsert(L, 1, 'a');
    ListInsert(L, 2, 'b');
    ListInsert(L, 3, 'c');
    ListInsert(L, 4, 'd');
    ListInsert(L, 5, 'e');

    printf("(3)L长度=%d\n", ListLength(L));

    printf("(4)顺序表位%s\n", (ListEmpty(L) ? "空" : "非空"));

    GetElem(L, 3, elemType);
    printf("(5)顺序表L的第3个元素=%c\n", elemType);

    printf("(6)元素b的位置=%d\n", LocateElem(L, 'b'));

    printf("(7)在第4个元素上插入f元素\n");
    ListInsert(L, 4, 'f');
    printf("输出顺序表L:");
    DispList(L);

    printf("(8)删除L的第3个元素\n");
    ListDelete(L, 3, elemType);

    printf("(9)输出顺序表L:");
    DispList(L);

    printf("(10) 释放顺序表\n");
    DestroyList(L);


    return 0;
}

运行截图
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140684.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!