数据结构--顺序表的9种基本运算,初始化,销毁,判断是否为空表,长度,求指定位置的元素值...

1 人赞了该文章

最终的实现如图:

代码为:

// 线性表-顺序表.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//顺序表的9种基本运算
#include "pch.h"
#include <iostream>
#include "malloc.h"  //顺序表,使用malloc函数动态分配空间
#define MaxSize 10
#define ERROR  -1
#define OVERFLOW -2
typedef   int  ElemType ;

typedef struct sqList 
{
    ElemType  data[MaxSize];
    int length;
}sqlist,*SqList;

//初始化线性表
void InitList(SqList  &L)
{
    L = (SqList)malloc(sizeof(sqlist));
    L->length = 0;
    for (int i = 0; i < MaxSize; i++)
    {
        L->data[i] = 0;//初始化顺序表中的值,赋值为0
    }
}
//创建一个顺序表
void CreateSqList(SqList &L)
{
    int i;
    printf("请问您想输入几个数字:");
    scanf("%d",&i);
    if (i<1 || i>MaxSize)
    {
        printf("输入有误");

    }
    else
    {
        for (int j = 0; j<i ; j++)
        {
            int num;
            printf("请输入一个数字:");
            scanf("%d", &num);
            L->data[j] = num;
            L->length++;
        }
    }
}

//销毁一个线性表
void DestroyList(SqList &L)
{
    free(L);
}

//判断线性表是否为空表
bool ListEmpty(SqList L)
{
    if (L->length==0)
    {
        printf("为空表\r\n");
        return true;
    }
    else
    {
        printf("不为空表\r\n");
        return false;
    }
}

//求线性表的长度
int ListLength(SqList L)
{
    return L->length;
}

//插入一个数据元素
int ListInsert(SqList &L, int i, ElemType e)
{
    if (i<1 || i>L->length + 1)  return ERROR;
    if (L->length>=MaxSize)
    {
        return OVERFLOW;
    }
    else
    {
        for (int j = L->length; j >= i; j--)
        {
            L->data[j] = L->data[j - 1];
        }
        L->data[i - 1] = e;
        L->length++;
        printf("插入成功\r\n");
        return L->length;
    }

}
//求线性表中第i个位置的元素的值,并存放在e中
ElemType GetElem(SqList L, int i, ElemType &e)
{
    if (i<1||i>L->length)
    {
        printf("输入错误\r\n");
        return  ERROR;
    }
    else
    {
        e = L->data[i - 1];
        return  e;
    }
}

//定位查找,找出线性表与e相等的元素的逻辑位序
void LocateElem(SqList L, ElemType e)
{
    for (int i = 0; i < L->length; i++)
    {
        if (L->data[i] == e)
        {
            printf("查找成功,存在,是第%d个元素\r\n",i+1);

        }
    }
}
//删除某个元素
ElemType ListDelete(SqList L, int i, ElemType &e)
{
    if (i<1 || i>L->length) return ERROR;
    e = L->data[i - 1];
    for (int j =i; j <L->length; j++)
    {
        L->data[j - 1] = L->data[j];
    }
    L->length--;
    printf("成功\r\n");
    return 1;
}
//遍历整个顺序表
void  DispList(SqList L)
{
    printf("\r\n*********************整个顺序表的值********************************\r\n");
    for (int i = 0; i < L->length; i++)
    {
        printf("第%d个数字为%d\r\n",i+1,L->data[i]);
    }
    printf("\r\n****************************************************\r\n");
}

int main()
{
    SqList L;
    printf("----初始化一个顺序表------\r\n");
    InitList(L);
    printf("-----建立一个顺序表------\r\n");
    CreateSqList(L);
    DispList(L);
    printf("------判断顺序表是否为空值------\r\n");
    ListEmpty(L);
    printf("-----求线性表的长度-------------\r\n");
    int length = ListLength(L);
    printf("线性表长度为:%d\r\n", length);
    printf("---------在第2个位置插入一个元素666------\r\n");
    ListInsert(L,2,666);
    DispList(L);
    printf("------求第3个元素的值:-----\r\n");
    int i = 0;
    GetElem(L,3,i);
    printf("%d\r\n", i);
    DispList(L);
    printf("-------查找等于666的元素是否存在------\r\n");
    LocateElem(L, 666);
    printf("----------删除第3个元素------------\r\n");
    int m = 0;
    ListDelete(L,3,m);
    printf("被删除的元素为:%d\r\n",m);
    DispList(L);
    DestroyList(L);
}

评论

暂无评论