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

本文详细介绍了如何使用C++实现顺序表的初始化、插入、输出、长度判断、空判断、元素获取、插入、删除和释放等基本操作。通过一步步实例演示,读者可以深入理解顺序表的存储结构和相关算法设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:领会顺序表的存储结构和掌握顺序表中各种基本运算算法的设计。

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

  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的第3个元素。
  11. 输出顺序表L。
  12. 释放顺序表L。
    //计算机 小淇在敲代码 实现顺序表的各种基本运算的算法
    #include<stdio.h>
    #include<malloc.h>
    //线性表的顺序存储结构
    #define MaxSize 50
    typedef char ElemType;
    char ch;
    typedef struct
    {
     ElemType data[MaxSize];
     int length;
    }SqList;
    //(1)初始化顺序表
    void InitList(SqList * &L)
    {
     L=(SqList *)malloc(sizeof(SqList));
     L->length=0;
    }
    //(2)依次插入a,b,c,d,e元素
    bool ListInsert(SqList * &L,int i,ElemType e) 
    {
     int j;
     if(i<1 || i>L->length+1)
           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;
    }
    //(3)输出顺序表
    void DisplayList(SqList * L) 
    {
     for(int i=0;i<L->length;i++)
         printf("%c",L->data[i]);
     printf("\n");
    } 
    //(4)求线性表的长度
    int ListLength(SqList * L) 
    {
     return (L->length);
    } 
    //(5)判断顺序表L是否为空
    bool ListEmpty(SqList * L)
    {
     return (L->length==0);
    }
    //(6)输出顺序表L的三个元素
    bool GetElem(SqList * L,int i,ElemType e) 
    {
     if(i<1||i>L->length)
          return false;
     e=L->data[i-1];
     ch=e;
     return true;
    }
    //(7)查找顺序表所在位置
    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;
     } 
    //(10)删除顺序表上的第三个元素
    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;
    }
    //(12)释放线性表
    void DestroyList(SqList * &L)
    {
     free(L);
    }
    
    
    //主函数
    int main()
    {
     SqList *L;
     printf("计算机 小淇在敲代码\n");
     
     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:");
     DisplayList(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",ch);
     
     printf("(7)输出元素a的位置:%d\n",LocateElem(L,'a'));
     
     printf("(8)在第4个元素位置上插入f元素.\n");
     ListInsert(L,4,'f');
     
     printf("(9)输出顺序表L:"); 
     DisplayList(L);
     
     printf("(10)删除顺序表L的第3个元素.\n");
     ListDelete(L,3,'e');
     
     printf("(11)输出顺序表L:");
     DisplayList(L);
     
     printf("(12)释放顺序表L\n");
     DestroyList(L);
     return 0;
    }
    

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值