学习笔记(1):线性表的顺序存储结构------顺序表的实现

本文介绍了一个简单的顺序表数据结构的实现及其基本操作,包括创建、初始化、销毁、查询、插入和删除等。通过具体的C语言代码示例展示了如何进行这些操作。

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

顺序表

#include<stdio.h>
#include<malloc.h>
#define MaxSize 50

typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize];
    int length;
}SqList;

/*
 *1.由已给数组元素创建顺序表,创建顺序表
 */
void CreateList(SqList *&L,ElemType a[],int n)
{
    int i=0,k=0;
    L = (SqList*)malloc(sizeof(SqList));
    while(i<n)
    {
        L->data[i] = a[i];
        k++;
        i++;
    }
    L->length=k;
}
/*
 *2.初始化一个空的顺序表
 */
 void InitList(SqList * &L)
 {
     L = (SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
     L->length = 0;  //置空线性表的长度为0
 }

 /*
 *3.销毁顺序表
 */
 void DestroyList(SqList *&L)
 {
     free(L);//释放指针L所指向的内存空间

 }
 /*
 *4.求顺序表的长度
 */
 int Length(SqList *L)
 {
     return L->length;
 }
 /*
 *5.输出顺序表各元素值
 */
 void Display(SqList *L)
 {
     int i=0;
     for(i;i<L->length;i++)
     {
         if(i!=L->length-1)
            printf("%d ",L->data[i]);
         else{
            printf("%d\n",L->data[i]);
         }
     }
 }
 /*
 *6.求顺序表中指定逻辑顺序的元素值
 *参数L:顺序表指针
 *参数i:顺序表中要获取元素的逻辑顺序
 *参数e:引用参数,用于返回要获取元素的值
 *返回值:成功返回rue,失败返回false
 */
 bool GetElem(SqList *L,int i,ElemType &e)
 {
     if(i<1||i>L->length)
        return false;
     e = L->data[i-1]; //逻辑顺序映-1变为对应物理顺序
     return true;
 }
 /*
 *7.按指定值查找顺序表对应元素,并返回其对应逻辑序号
 */
 int LocateElem(SqList *L,ElemType e)
 {
     int i=0;
     while(i<L->length&&L->data[i]!=e)
        i++;
     if(i==L->length)
        return 0;   //未找到返回0
     return i+1;    //找到后返回其逻辑序号

 }
 /*
 *8.插入指定元素到顺序表的指定位置
 */
 bool ListInsert(SqList *&L,int i,ElemType e)
 {
     if(i<1||i>L->length+1)
        return false;       //参数i不合法时返回false
     i--;                   //将逻辑序号转化为物理序号
     int j;
     for(j=L->length;j>i;j--)//将data[i]及后面的元素后移一个位置
        L->data[j] = L->data[j-1];
     L->data[i]=e;  //插入元素e
     L->length++;   //顺序表长度加一
     return true;   //插入成功返回true
 }
 /*
 *9.删除指定逻辑位置的数据元素
 */
 bool ListDelete(SqList *L,int i,ElemType &e)
 {
     if(i<1||i>L->length)
        return false;
     int j;
     i--;
     e = L->data[i];    //将要删除元素赋值给e
     for(j=i;j<L->length-1;j++) //顺序表中data[i]之后的元素向前移动一位
        L->data[j]=L->data[j+1];
     L->length--;   //顺序表的长度-1;
     return true;   //成功返回true
 }
int main()
{

    printf(">>>>>>>>>>>>>>>>>>>>>>>Test1<<<<<<<<<<<<<<<<<<<<<<<<<\n");
    //测试一:通过整形数组a[]={5,4,1,5,6}创建其对应的顺序表
    ElemType a[]={5,4,1,5,6};
    SqList *L;
    CreateList(L,a,sizeof(a)/sizeof(ElemType));
    Display(L);
    printf("Length of List:%d\n",L->length);


    //测试二:创建一个顺序表
    //在末尾插入 5,8,1,7并输出顺序表所有元素
    //输出元素1逻辑序号
    //删除逻辑序号为2的元素并输出顺序表所有元素与被删除的元素值
    SqList *L2;
    InitList(L2);
    ListInsert(L2,L2->length+1,5);
    ListInsert(L2,L2->length+1,8);
    ListInsert(L2,L2->length+1,1);
    ListInsert(L2,L2->length+1,7);
    Display(L2);
    printf(">>>>>>>>>>>>>>>>>>>>>>>Test2<<<<<<<<<<<<<<<<<<<<<<<<<\n");

    printf("Logic number of element 1 is:%d\n",LocateElem(L2,1));
    ElemType re;
    ListDelete(L2,2,re);
    printf("The number %d has been delete.\n",re);
    Display(L2);


    DestroyList(L);//销毁顺序表
    DestroyList(L2);

    L=NULL;//将指针设为空指针
    L2=NULL;

}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值