【数据结构01】线性表基本操作之在顺序表上实现

#include <iostream>
#include <stdio.h>
using namespace std;

#define InitSize 100       //定义线性表初始长度
#define MAXSIZE 50         //定义线性表的最大长度
typedef struct{            //定义顺序表数据类型
    int data[MAXSIZE];     //顺序表的元素
    int length;            //顺序表的当前长度
}SqList;                  //静态顺序表

typedef struct{
    int *data;              //只是动态分配数组的指针
    int MaxSize, length;    //数据数组的最大容量和当前长度
}SqList1;

bool ListInesrt(SqList &L,int i,int e){
    if(i<1||i>L.length+1)
        return false;
    if(L.length >= MAXSIZE)
        return false;
    for(int j=L.length;j>i-1;j--)
        L.data[j]=L.data[j-1];
    L.data[i-1]=e;
    L.length++;
    return true;
}

void ListInit(SqList &L){
    int i,temp;
    L.length = 0;
    for(i=0;i<MAXSIZE;i++){
        scanf("%d",&temp);
        if(temp!=-1){
            L.data[i] = temp;
            L.length++;
        }
        else
            break;
    }
    return;
}

bool ListDelete(SqList &L,int i,int &e){
    if(i<1||i>L.length)
        return false;
    e=L.data[i-1];
    for(int j=i-1;j<L.length-1;j++)
        L.data[j] = L.data[j+1];
    L.length--;
    return true;
}

int LocateElem(SqList L,int e){
    for(int i=0;i<L.length;i++){
        if(L.data[i]==e){
            return i+1;
        }
    }
    return -1;
}

void Output(SqList L){
    int i;
    for(i=0;i<L.length;i++)
        printf("%d ",L.data[i]);
    printf("len:%d \n",L.length);
}

int main()
{
    int e,i;

    printf("输入数据,以-1结束:\n");
    SqList L;
    ListInit(L);
    printf("输入插入位置i[0<i<=%d]:\n",L.length);
    scanf("%d",&i);
    printf("输入插入元素的值:\n");
    scanf("%d",&e);
    ListInesrt(L,i,e);
    Output(L);

    printf("删除第几个元素?[0<i<=%d]\n",L.length);
    scanf("%d",&i);
    printf("删除第%d个元素,其值返回给e:\n",i);
    ListDelete(L,i,e);
    printf("e=%d\n",e);
    Output(L);

    printf("输入要查找的值:\n");
    scanf("%d",&e);
    printf("按值查找(未找到返回-1):\n");
    printf("第一个值为%d的元素位于第[%d]位",e,LocateElem(L,e));
}

参考:王道考研数据结构指导

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_43335313

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

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

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

打赏作者

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

抵扣说明:

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

余额充值