C++顺序表实验

Posted 康小庄

tags:

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

完整代码

#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;

运行截图

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

c++实验9 图及图的操作实验

数据结构实验:线性表的顺序表示和链式表示及插入、删除、查找运算

C++数据结构,写一种算法,从顺序表删除第i个元素开始的第k个元素

如何用JAVA语言建立含有若干个元素的顺序表,并实现插入,删除,查找等基本操作

数据结构之顺序表(数组)和链表

C++查找实验