问题描述

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


基本要求

(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)实现删除功能

java的线性表按汉字名字排序 线性表排序代码_java的线性表按汉字名字排序

2)实现取元素功能

java的线性表按汉字名字排序 线性表排序代码_开发语言_02

3)实现查找功能

java的线性表按汉字名字排序 线性表排序代码_c语言_03

4)实现插入功能

java的线性表按汉字名字排序 线性表排序代码_java的线性表按汉字名字排序_04

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

java的线性表按汉字名字排序 线性表排序代码_开发语言_05

 

动动手指,点个赞吧~