线性表之顺序表

实验题1:实现顺序表各种基本运算的算法
目的:编写一个sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个主程序,完成如下功能:

输出顺序表的基本运算如下:
(1)初始化顺序表L
(2)一次插入a, b, c, d, e元素
(3)输出顺序表L:
(4)输出顺序表L长度:
(4)顺序表L为
(5)输出顺序表L的第3个元素:
(6)元素a的位置 :
(7)在第4个元素位置插入f元素
(8)输出顺序表L:
(9)删除L的第三个元素
(10)输出顺序表L:
(11)释放顺序表L

对应代码如下:

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int length;
} SqList;
//整体建立顺序表
void CreateList(SqList *&L, ElemType a[], int n)
{
    L = (SqList *)malloc(sizeof(SqList));
    for(int i = 0; i < n; n++)
    {
        L -> length = 0;
    }
    L -> length = n;
}
//初始化线性表
void InitList(SqList *&L)
{
    L = (SqList *)malloc(sizeof(SqList));
    L -> length = 0;
}
//销毁线性表
void DestroyList(SqList *&L)
{
    free(L);
}
//判断线性表是否为空表
bool ListEmpty(SqList *L)
{
    return(L -> length == 0);
}
//求线性表的长度
int ListLength(SqList * L)
{
    return(L -> length);
}
//输入线性表
void DispList(SqList * L)
{
    for(int i = 0; i < L -> length; i++)
    {
        printf(" %c", L-> data[i]);
    }
    printf("\n");
}
//求线性表中第i个元素值
bool getElem(SqList * L, int i, ElemType &e)
{
    if(i < 1 || i > L -> length)
    {
        return false;
    }
    e = L -> data[i-1];
    return true;
}
//查找第一个只有为e的元素符号
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;
    }
}

//插入第i个元素
bool ListInsert(SqList *&L, int i, ElemType e)
{
    int j;
    if(i < 1 || i > L -> length+1 || L -> length == MaxSize)
    {
        return false;
    }
    i--;
    for(j = L -> length;j > i;j--)
    {
        L -> data[j] = L -> data[j-1];

    }
    L -> data[i] = e;
    L -> length++;
    return true;
}
//删除第i个元素
bool ListDelete(SqList *&L, int i, ElemType &e)
{
    int j;
    if(i < 1 || i > L -> length)
    {
        return false;
    }
    i--;
    e = L -> data[i];
    for(j = i; j < L -> length-1 ;j++)
    {
        L -> data[j] = L -> data[j+1];
    }
    L -> length--;
    return true;
}



int main()
{
    SqList * L;
    ElemType e;
    printf("输出顺序表的基本运算如下:\n");
    printf("  (1)初始化顺序表L\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:");
    DispList(L);

    printf("  (4)输出顺序表L长度:%d\n", ListLength(L));
    printf("  (5)顺序表L为%s\n", (ListEmpty(L)? "空" : "非空"));
    getElem(L, 3, e);

    printf("  (6)输出顺序表L的第3个元素:%c\n", e);
    printf("  (7)元素a的位置 :%d\n", LocateElem(L, 'a'));
    printf("  (8)在第4个元素位置插入f元素 \n");
    ListInsert(L, 4, 'f');
    printf("  (9)输出顺序表L:" );
    DispList(L);
    printf("  (10)删除L的第三个元素\n" );
    ListDelete(L, 3, e);
    printf("  (11)输出顺序表L: ");
    DispList(L);
    printf("  (12)释放顺序表L\n");
    DestroyList(L);
    return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值