线性表的顺序表示(代码带注释和运行截图含完整代码)

该博客展示了如何使用C语言实现顺序表的创建、显示、求长度、插入、删除和查找等基本操作。通过示例代码,博主演示了线性表的动态管理,包括错误处理和元素移动。博客还包含了实际运行的删除、取元素、查找功能的输出示例。
摘要由CSDN通过智能技术生成

问题描述

实现顺序表的建立、求长度,取元素、修改元素、插入、删除等基本操作。


基本要求

(1)依次从键盘读入数据,建立顺序表

(2)输出顺序表中的数据元素;

(3)求顺序表的长度;

(4)根据指定条件能够取元素和修改元素;

(5)实现在指定位置插入和删除元素的功能。


源代码(加注释)

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30
#define ERROR -1
typedef enum {false, true} bool;
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
//声明一个结构体来存放顺序表
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

List MakeEmpty();
Position Find( List L, ElementType X );
bool Insert( List L, ElementType X, Position P );
bool Delete( List L, Position P );

int main()
{
    List L;
    ElementType X;
    Position P;
    int N;

    L = MakeEmpty();
    for(int i=0;i<20;i++)
    {
        if ( Insert(L, i, i)==false )
           printf(" 插入错误: %d 未插入成功\n", X);
    }
    //实现插入功能
    printf("插入前线性表的元素:");
    print(L);
    printf("要插入的元素:");
    scanf("%d",&X);
    printf("要插入的位置:");
    scanf("%d",&P);
    if ( Insert(L, X,P )==false )
           printf(" 插入错误: %d 未插入成功\n", X);
    printf("插入后的线性表中的元素:");
    print(L);

    //实现删除功能
    printf("删除前线性表中的元素:");
    print(L);
    printf("要删除元素的位置:");
    scanf("%d",&P);
    printf("删除后线性表中的元素:");
    print(L);

    //实现查找的功能
    printf("查找前线性表的元素:");
    print(L);
    printf("要查找的元素:");
    scanf("%d",&X);
    if(Find(L,X)!=ERROR)
    {
        printf("要查找的元素在线性表中的位置:");
        printf("%d\n",Find(L,X));
    }else
    {
        printf("未找到");
    }
    printf("查找之后线性表的元素:");
    print(L);

    //实现取元素的功能
    printf("取元素前线性表的元素:");
    print(L);
    printf("要取元素:");
    scanf("%d",&X);
    if(Find(L,X)!=ERROR)
    {
        printf("要取元素在线性表中的位置:");
        printf("%d\n",Find(L,X));
    }else
    {
        printf("未找到");
    }
    printf("取元素之后线性表的元素:");
    print(L);

   //实现取元素的功能
    printf("取元素前线性表的元素:");
    print(L);
    printf("要取元素的位置:");
    scanf("%d",&P);
    if(Get(L,P)!=ERROR)
    {
        printf("要取的元素:");
        printf("%d\n",Get(L,P));
    }
    printf("取元素之后线性表的元素:");
    print(L);
    
}

//输出线性表的元素
void print(List L)
{
    int i=0;
    while(i<=L->Last)
    {
        printf("%d ",L->Data[i]);
        i++;
    }
    printf("\n");
}

//创建并返回一个空的线性表
List MakeEmpty()
{
    List l = (List)malloc(sizeof(struct LNode));
    //空的线性表的长度设为-1
    l->Last=-1;
    return l;
}

//返回线性表中位置P的值
ElementType Get(List L,Position P)
{
    //参数P指向非法位置
    if(P<0||P>L->Last+1)
    {
        printf("ILLEGAL POSITION");
        return false;
    }
    return L->Data[P];
}

//返回线性表中X的位置
Position Find(List L,ElementType X)
{
    Position i=0;
    //遍历线性表,找到Data为X的位置
    while(i<=L->Last&&L->Data[i]!=X)
        i++;
    //线性表中不存在元素X
    if(i>L->Last)
        return ERROR;
    else
        return i;
}

//将X插入在位置P
bool Insert(List L,ElementType X,Position P)
{
    Position j;
    //空间已满,返回false
    if(L->Last==MAXSIZE-1)
    {
        printf("满了,");
        return false;
    }
    //参数P指向非法位置
    if(P<0||P>L->Last+1)
    {
        printf("ILLEGAL POSITION");
        return false;
    }
    //向后移动元素
    for(j=L->Last;j>=P;j--)
    {
        L->Data[j+1]=L->Data[j];
    }
    //插入成功返回true
    L->Data[P]=X;
    //修改线性表的长度
    L->Last++;
    return true;
}
//将位置P的元素删除
bool Delete(List L,Position P)
{
    Position i;
    //参数P指向非法位置
    if(P<0||P>L->Last)
    {
        printf("POSITION %d EMPTY",P);
        return false;
    }
    //将元素向前移动
    for(i=P;i<L->Last;i++)
        L->Data[i]=L->Data[i+1];
    //修改线性表的长度
    L->Last--;
    return true;
}

运行结果及截图

1)实现删除功能

2)实现取元素功能

3)实现查找功能

4)实现插入功能

5)实现从键盘读入并求线性表长度功能

 

动动手指,点个赞吧~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值