DataStruct | 顺序表基本操作

本文深入讲解了顺序表的基本操作,包括初始化、建立、销毁、判空、求表长、遍历输出、插入、删除、按值查找、按位查找及数据修改等。通过具体代码示例,帮助读者理解顺序表的实现原理及其在程序设计中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * @Author: Zero
 * @Date: 2019-11-14
 * @Filename: 
 * @Description: file content
 * @version: V
 * @Copyright:  © 2019. All rights reserved.
 */
#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize]; //数组静态分配
    int length;
} SqList;
/**
 * @description: 1.初始化
 */
void InitList(SqList &L)
{
    L.length = 0;
}

/**
 * @description: 2.建立顺序表
 * 给定的数据存放在数组a[]中,长度为n
 *//*
int CreatList(SqList &L, ElemType a[], int n)
{
    if (n > MaxSize)
    {
        printf("顺序表的空间不够,无法建表\n");
        return 0;
    }
    for (int i = 0; i < n; i++)
    {
        L.data[i] = a[i];
    }
    L.length = n;
    return 1;
}
*/
int CreatList(SqList &L){               //创建一个顺序表
    printf("请输入你要插入顺序表的数:");
    int i=0;
    while(~scanf("%d",&L.data[i])){
        i++;
        L.length++;
        if(getchar()=='\n')break;
    }
    return 0;
}
/**
 * @description: 3.销毁表
 * 静态存储分配,顺序表变量退出作用域时自动释放该变量所占用的内存
 */

/**
 * @description: 4.判空操作
 */
int EmptyList(SqList &L)
{
    if (L.length == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
/**
 * @description: 5.求表长
 */
int LengthList(SqList &L)
{
    return L.length;
}
/**
 * @description: 6.打印遍历输出
 */
void PrintList(SqList &L)
{
    for (int i = 0; i < L.length; i++)
    {
        printf("%2d", L.data[i]);
    }
    printf("\n");
}
/**
 * @description: 7.插入
 * @parameter: Elem
 */
bool InsertElem(SqList &L, int i, ElemType e)
{
    if (i < 1 || i > L.length + 1)
    {
        printf("插入位置错误!");
        return false;
    }
    if (L.length >= MaxSize)
    {
        printf("上溢:当前存储空间已满!");
        return false;
    }
    for (int j = L.length; j >= i; j--)
        L.data[j] = L.data[j - 1];
    L.data[i - 1] = e;
    L.length++;
    return true;
}
/**
 * @description: 8.删除
 * @parameter: 
 */
bool DeleteElem(SqList &L, int i, ElemType &e)
{
    if (i < 1 || i > L.length)
        return false;
    e = L.data[i - 1];
    for (int j = i; j < L.length; j++)
        L.data[j - 1] = L.data[j];
    L.length--;
    return true;
}

/**
 * @description: 9.按值查找
 * @parameter: 
 */
bool LocateElem(SqList L, ElemType e)
{
    int i;
    for (int i = 0; i < L.length; i++){
        if (L.data[i] == e){
            return i + 1;
        }
    }
    printf("查找不到...");
    return false;
}
/**
 * @description: 10.按位查找
 * @parameter: 
 */
bool GetElem(SqList L, int i, ElemType &e)
{
    if (i < 1 || i > L.length)
    {
        printf("查找位置非法!");
        return false;
    }
    else
    {
        e = *(L.data + i - 1);
        return true;
    }
}
/**
 * @description: 11.更改数据
 * @parameter: 
 */
int ReviseSqList(SqList &L,int i,int e){
    L.data[i-1]=e;
    return 0;
}
int main()
{
    SqList L;
    InitList(L);
    CreatList(L);

    printf("*****************************\n");
    printf("* 请输入你要进行的操作:    *\n");
    printf("* 1.读取顺序表中的内容      *\n");
    printf("* 2.查找顺序表中是否存在某数*\n");
    printf("* 3.增加顺序表中的数据      *\n");
    printf("* 4.删除顺序表中的数据      *\n");
    printf("* 5.修改顺序表中的数据      *\n");
    printf("* 6.查询顺序表的表长值      *\n");
    printf("*****************************\n");
    int t;
    int i,e,n;
    while(~scanf("%d",&t)){
        switch(t){
            case 1:
                PrintList(L);
                break;
            case 2:
                printf("请输入你要查找的数:\n");
                scanf("%d",&e);
                n=LocateElem(L,e);
                if(n!=-1){
                    printf("%d\n",n);
                }
                break;
            case 3:
                printf("请输入你要插入的位置和数:\n");
                scanf("%d%d",&i,&e);
                InsertElem(L,i,e);
                break;
            case 4:
                printf("请输入要删除的位置:\n");
                scanf("%d",&i);
                DeleteElem(L,i,e);
                break;
            case 5:
                printf("请输入要更改的位置和数据:\n");
                scanf("%d%d",&i,&e);
                ReviseSqList(L,i,e);
                break;
            case 6:
                printf("该顺序表长为:");
                n=LengthList(L);
                printf("%d",n);
                break;
            case 0:
                exit(0);
        }
    }
    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值