顺序表代码

这篇文章详细介绍了如何使用C语言实现顺序表数据结构,包括初始化、插入、删除、查找以及相关函数的定义和实现。

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

//main.c
#include <stdio.h>
#include <stdlib.h>
#include "SqList.h"


int main()
{
    //1.初始化
    SqList L;
    L.length = 0;
    //2.插入
    listInsert(&L,1,1);
    listInsert(&L,2,2);
    listInsert(&L,3,3);
    //打印
    printList(L);
    length(L);
    //判空
    isEmpty(L);
    listInsert(&L,4,4);
    listInsert(&L,5,5);
    listInsert(&L,6,6);
    //打印
    printList(L);
    length(L);
    //删除
    ElemType a;
    listDelete(&L, 4, a);
    //打印
    printList(L);
    length(L);
    //按值查找
    printf("%d\n",locateElem(L, 6));
    //按位查找
    printf("%d\n",getElem(L, 3));
    return 0;
}
//SqList.h
#define MaxSize 50

typedef int ElemType;

//静态分配
typedef struct {
    ElemType data[50];
    //ElemType data[MaxSize];
    int length;
}SqList;

//动态分配
typedef struct{
    ElemType *data;
    int length;
}SeqList;
//c: L.data = (ElemType*)malloc(sizeof(ElemType*)*InitSize);
//c++: L.data = new Elemtype[InitSize];

//void initList(SqList *L);
int length(SqList L);
int locateElem(SqList L, ElemType e);
ElemType getElem(SqList L, int i);
int listInsert(SqList *L, int i, ElemType e);
int listDelete(SqList *L, int i, ElemType *e);
void printList(SqList L);
int isEmpty(SqList L);
void destoryList(SqList *L);
//SqList.c
#include "SqList.h"

//顺序表上基本操作的实现
//1.初始化表
//void initList(SqList *L){
    //L->data[0] = {0};
   // L->length = 0;
//}

//2.求表长
int length(SqList L){
    printf("%d\n",L.length);
    return L.length;
}

//3.按值查找操作
int locateElem(SqList L, ElemType e){
    for(int i = 0; i < L.length; i++){
        if(L.data[i] == e)
            return i + 1;//因为是位序,所以+1
    }
    return 0;
}

//4.按位查找操作:获取表中第i个位置的元素的值
ElemType getElem(SqList L, int i){
    if(i > L.length)
        return 999;
    return L.data[i - 1];
}

//5.插入操作:在表L中第i个位置上插入指定元素e
int listInsert(SqList *L, int i, ElemType e){
    if(i < 1 || i > L->length + 1)//插入错误的位置:[1,length+1]
        return 0;
    if(L->length >= MaxSize)//表满了
        return 0;
    for(int j = L->length; j > i - 1; j--){
        L->data[j] = L->data[j - 1];
    }
    L->data[i - 1] = e;
    L->length++;
    return 1;
}

//6.删除操作:删除表L中第i个位置的元素,并用e返回删除元素的值
int listDelete(SqList *L, int i, ElemType *e){
    if(i < 1 || i > L->length)
        return 0;
    if(L->length <= 0)
        return 0;
    e = L->data[i - 1];
    for(int j = i - 1; j < L->length - 1; j++){//写的复杂 不好,不如书上
        L->data[j] = L->data[j + 1];
    }
    L->length--;
    return 1;
}

//7.输出操作
void printList(SqList L){
    int l = L.length;
    for(int i = 0; i < l; i++){
        printf("%d ",L.data[i]);
    }
    printf("\n");
}

//8.判空操作
int isEmpty(SqList L){
    return L.length <= 0 ? 1 : 0;
}

//9.销毁操作
void destoryList(SqList *L){
    //free
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值