实现顺序表各种基本运算的算法

/**
*    实验题目:
*        实现顺序表各种基本运算的算法
*    实验内容:
*        设计一个程序,实现顺序表的各种基本运算的算法,并在此基础上设计一个
*    主程序完成如下功能:
*    1、初始化顺序表L。
*    2、依次采用尾插法插入a、b、c、d、e元素
*    3、输出顺序表L。
*    4、输出顺序表L长度。
*    5、判断顺序表L是否为空。
*    6、输出顺序表L的第3个元素。
*    7、输出元素a的位置。
*    8、在第4个元素位置上插入f元素。
*    9、输出顺序表L。
*    10、删除L的第三个元素。
*    11、输出顺序表L。
*    12、释放顺序表L。
*/
#include <stdio.h>
#include <malloc.h>

#define MAX_SIZE        50

typedef char ElemType;
typedef struct
{
    ElemType data[MAX_SIZE];
    int length;
}SqList;                // 顺序表类型定义

/*-----------------------初始化顺序表L-----------------------*/
void InitList(SqList *&L)       // 指针的引用
{
    L = (SqList *)malloc(sizeof(SqList));
    L->length = 0;
}

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

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

/*---------------------返回顺序表L的元素个数------------------*/
int ListLength(SqList *L)
{
    return (L->length);
}

/*---------------------输出顺序表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");
}

/*----------------------获取顺序表L中第i个元素------------------*/
int GetElem(SqList *L, int i, ElemType &e)      // 引用类型
{
    if((i < 1) || (i > L->length))
        return 0;
    e = L->data[i - 1];

    return 1;
}

/*-----------------------在顺序表L中查找元素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);
}

/*----------------------在顺序表L中第i个位置上插入元素e------------------*/
int ListInsert(SqList *&L, int i, ElemType e)
{
    int j;

    if((i < 1) || (i > L->length + 1))
        return 0;

    i--;                                // 将顺序表位序转化为data下标
    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;
}

/*---------------------------在顺序表L中删除第i个元素------------------------*/
int ListDelete(SqList *&L, int i, ElemType &e)
{
    int j;

    if((i < 1) || (i > L->length))
        return 0;
    i--;                                // 将顺序表位序转化为data下标
    e = L->data[i];
    for(j = i; j < L->length - 1; j++)  // 将data[i]后面的元素前移一个位置
        L->data[j] = L->data[j + 1];
    L->length--;                        // 顺序表长度减1

    return 1;
}

int main(void)
{
    SqList *L;
    ElemType e;

    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的第3个元素\n");
    ListDelete(L, 3, e);
    printf("(11)输出顺序表L:");
    DispList(L);
    printf("(12)释放顺序表L\n");
    DestroyList(L);

    return 0;
}

测试结果:

(1)初始化顺序表L
(2)依次采用尾插法插入a、b、c、d、e元素
(3)输出顺序表L:a b c d e
(4)顺序表L长度 = 5
(5)顺序表L为非空
(6)顺序表L的第3个元素 = c
(7)元素a的位置 = 1
(8)在第4个元素位置上插入f元素
(9)输出顺序表L:a b c f d e
(10)删除L的第3个元素
(11)输出顺序表L:a b f d e
(12)释放顺序表L

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值