数据结构-线性表的顺序存储

本文介绍了数据结构中线性表的顺序存储结构。作者简化了数据结构老师给出的复杂代码,原来的项目包括dsp0201.cpp, sqlist.h, ds.h三个文件,但ds.h主要用于统一读写方法。经过简化,作者保留了核心功能,如内存分配、添加元素和删除元素,便于后续学习和参考。" 136066464,10622429,Node.js与数据库交互指南,"['数据库', '交互', 'Node.js', 'ORM', 'ODM']

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

目标效果:

数据结构老师让做的线性表的顺序存储结构例子,但是我感觉老师的代码太复杂并且太乱。原项目有三个页面,分别为dsp0201.cpp,sqlist.h,ds.h,但是ds.h页面主要统一定义了读写方法,因此我去掉了该页面,另外两个页面我也将代码简化处理,去掉些不重要的功能及语句,方便以后自己和同学复习查阅。


dsp0210.cpp页面:(main函数所在页面,调用基本的分配空间,添加数据,删除数据等方法)

#include <stdio.h>
#include <stdlib.h>
#define ElemType int                 //数据元素的类型
#include "sqlist.h"

//打印顺序表内容
void PrintLinkList(SqList L);
void read(int& e);

int main()
{
    SqList L;
    //初始化顺序表
    InitList(L);

    //添加数据
    ListInsert(L,1,12);
    ListInsert(L,1,23);
    ListInsert(L,1,34);
    ListInsert(L,1,45);

    //打印顺序表信息
    printf("\n开始时顺序表内容\n");
    PrintLinkList(L);
    printf("ListLength(L) : %d\n", ListLength(L));
    printf("ListEmpty(L)  : %d\n", ListEmpty(L));

    //4)顺序表插入
    printf("\n请输入一个元素:");
    ElemType x;
    scanf("%d", &x);
    printf("插入开头:");
    ListInsert(L,1,x);
    PrintLinkList(L);
    printf("插入末尾:");
    ListInsert(L,ListLength(L)+1,x);
    PrintLinkList(L);

    //5)顺序表删除
    printf("\n请选择删除第i(1..%d)个元素:", ListLength(L));
    int i;
    scanf("%d", &i);
    ElemType e;
    ListDelete(L,i,e);

    printf("顺序表内容:");
    PrintLinkList(L);

    //6)元素定位
    printf("\n请输入一个元素以便定位:");
    scanf("%d", &x);
    i = LocateElem(L,x);
    if ( i!=0 ) {
        printf("该元素是表中的第%d个元素.\n",i);
    } else
        printf("该元素在表中不存在.\n");

    printf("\n最后顺序表内容\n");
    PrintLinkList(L);
    printf("ListLength(L) : %d\n", ListLength(L));
    printf("ListEmpty(L)  : %d\n", ListEmpty(L));
    system("PAUSE");
    return 0;
}

//打印顺序表内容
void PrintLinkList(SqList L)
{
    for(int i=0;i<L.length;i++)
    {
        printf("%d\t",L.elem[i]);
    }
    printf("\n");
}



sqlist.h页面:(定义基本的添加删除方法)
#ifndef ElemType
#define ElemType int /* 数据元素类型默认为 int */
#define ELEMTYPE_TAG
#endif

/**********************************************************
*  顺序表的存储结构定义
***********************************************************/
#define LIST_INIT_SIZE 100 /* 存储空间初始分配容量 */
#define LISTINCREMENT 10 /* 存储空间分配的增量 */
typedef struct {
    ElemType *elem;    //存储空间基址
    int length;        //当前长度
    int listsize;      //当前已分配的存储空间(元素个数)
} SqList;

/**********************************************************
*  顺序表的基本操作的实现
***********************************************************/

//创建并初始化为空表
void InitList(SqList &L)
{
    L.elem=(ElemType *)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
}

//判断表L是否为空表
bool ListEmpty(SqList L)
{
    if(L.elem!=NULL)
        return false;
    else
        return true;
}

//求表L的长度
int ListLength(SqList L)
{
    return L.length;
}
//在表L中定位元素e首次出现的位置. 操作成功返回位序,失败时返回0
int LocateElem(SqList L, ElemType e)
{
    for (int j=0; j<L.length; j++)
        if ( e==L.elem[j] )  return j+1;
    return 0;
}


//在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR
void ListInsert(SqList &L, int i, ElemType e)
{
   if(i<1||i>L.length+1)
       printf("插入位置非法\n");
   else{
       int j;
       for(j=L.length;j>=i;j--)
       {
           L.elem[j]=L.elem[j-1];
       }
       L.elem[j]=e;
       L.length++;
   }
}

//删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR
void ListDelete(SqList &L, int i, ElemType &e)
{
    if(i<1||i>L.length)
        printf("删除位置非法\n");
    else
    {
        int j;
        for(j=i-1;j<L.length;j++)
        {
            L.elem[j]=L.elem[j+1];
        }
        L.length--;
    }

}


源码:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值