首页 > 其他分享 >线性表

线性表

时间:2024-01-31 22:34:26浏览次数:22  
标签:return 线性表 int elem length Sqlist

#include <stdio.h>
#include <stdlib.h>

#define M 100 // 线性表的最大容量

typedef int ElemType; // 定义元素类型

// 顺序线性表的结构体定义
typedef struct {
    ElemType *elem; // 存放元素的动态数组
    int length; // 线性表中当前元素的个数
} Sqlist;

// 初始化线性表
void InitList(Sqlist &L) {
    L.elem = new ElemType[M];
    if (!L.elem) {
        exit(0); // 分配内存失败,退出程序
    }
    L.length = 0; // 初始化长度为0
}

// 销毁线性表
void DestroyList(Sqlist &L) {
    free(L.elem); // 释放内存
    L.length = 0; // 将长度设置为0
}

// 插入元素
int Insert(Sqlist &L, int i, ElemType e) {
    if (i < 1 || i > L.length + 1) {
        return 0; // 插入位置不合法
    }
    if (L.length >= M) {
        return 0; // 线性表已满
    }
    for (int j = L.length; j >= i; j--) {
        L.elem[j] = L.elem[j - 1]; // 将元素后移
    }
    L.elem[i - 1] = e; // 插入元素
    L.length++; // 长度加1
    return 1;
}

// 删除元素
int Delete(Sqlist &L, int i, ElemType *e) {
    if (i < 1 || i > L.length) {
        return 0; // 删除位置不合法
    }
    *e = L.elem[i - 1]; // 获取被删除的元素
    for (int j = i; j < L.length; j++) {
        L.elem[j - 1] = L.elem[j]; // 将元素前移
    }
    L.length--; // 长度减1
    return 1;
}

// 获取元素
int GetElem(Sqlist L, int i, ElemType *e) {
    if (i < 1 || i > L.length) {
        return 0; // 获取位置不合法
    }
    *e = L.elem[i - 1]; // 获取元素
    return 1;
}

// 查找元素
int LocateElem(Sqlist L, ElemType e) {
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e) {
            return i + 1; // 查找成功,返回位置
        }
    }
    return 0; // 查找失败,返回0
}

// 判断线性表是否为空
int ListEmpty(Sqlist L) {
    return L.length == 0;
}

// 获取线性表的长度
int ListLength(Sqlist L) {
    return L.length;
}

int main() {
    Sqlist L;
    ElemType e;
    InitList(L);
    Insert(L, 1, 1);
    Insert(L, 2, 2);
    Insert(L, 3, 3);
    Delete(L, 2, &e);
    printf("删除的元素:%d\n", e);
    GetElem(L, 2, &e);
    printf("第2个元素:%d\n", e);
    printf("查找元素3的位置:%d\n", LocateElem(L, 3));
    printf("线性表是否为空:%d\n", ListEmpty(L));
    printf("线性表的长度:%d\n", ListLength(L));
    DestroyList(L); // 销毁线性表
    return 0;
}

 

标签:return,线性表,int,elem,length,Sqlist
From: https://www.cnblogs.com/muzhaodi/p/18000274

相关文章

  • 线性表 - 栈和队列
    栈后进先出LIFO两种实现方式使用数组实现的叫静态栈使用链表实现的叫动态栈相关题目简单难度225.用队列实现栈https://leetcode.cn/problems/implement-stack-using-queues/classMyStack{  privateQueue<Integer>q1;  privateQueue<Integer>q2; ......
  • 线性表(散列)- 哈希表
    哈希表散列表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表HashSetandHashMap哈希表使用O(N)空间复杂度存储数据,并......
  • 线性表 - 数组与链表
    感谢@pdai的全栈知识体系,数据结构与算法是相通的,做的题目与原博主不同。https://www.pdai.tech/md/algorithm/alg-basic-array.html数组数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。数组的优点:存......
  • 【算法】【线性表】【链表】LRU 缓存
    1 题目请你设计并实现一个满足  LRU(最近最少使用)缓存 约束的数据结构。实现 LRUCache 类:LRUCache(intcapacity) 以 正整数 作为容量 capacity 初始化LRU缓存intget(intkey) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。voidput......
  • 【算法】【线性表】【链表】随机链表的复制
    1 题目给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random......
  • 【算法】【线性表】【链表】环形链表
    1 题目给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos 不作为参数进行传递 。仅......
  • 【算法】【线性表】【链表】K 个一组翻转链表
    1 题目给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例1:......
  • 数据结构线性表之【循环链表、双向链表】
    循环链表在单链表中,每个结点都带有一个指向其后继结点的指针,但因为表尾元素没有后继结点,所以表尾结点的指针域为空,表明它不指向任何结点,并表示这个结点是最后一个结点。现在修改这个约定,将表尾结点的指针指回头结点,从而形成一类新链表。在这样的链表中,从任何一个结点出发并沿着指针......
  • 数据结构——顺序线性表(向量)
    参考文章:数据结构(顺序表——线性表)_创建顺序线性表sl,调用initlist()函数对sl初始化-CSDN博客以下是作为个人笔记,自己学习用。线性表是具有相同特性的数据元素的一个有限序列,在线性表中每个数据元素由逻辑序号唯一确定。线性表的特性:1.有穷性:表中元素个数是有限的。2.一致性:表中所......
  • 数据结构【线性表之单链表】
    链表链表:线性表还可以使用链式存储方式保存,即线性表中的各个元素保存在各自的存储空间中,形成一个个节点。这些结点在内存的地址不要求是相邻的,它们之间通过指针连接起来。特点:灵活存储,不要求预先分配一块连续的空间,而是按需分配,随时需要,随时分配不要求分配的空间必须是相邻的没有......