顺序表实验

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

  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

代码如下

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

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


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


bool ListEmpty(SqList *L) {
    return (L->length == 0);
}//判断表是否为空 


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


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


bool GetElem(SqList *L, int i, ElemType &e) 
    {
      if (i < 1 || i > L->length)
     
        return 0;
        e = L->data[i]; // 通过给e赋值来获取指定的元素
        return 1;
    }


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;
}//按元素值查找 


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;
}
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() 
{
    
    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);


    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值