C语言 数据结构之数组模拟实现顺序表流程详解

C语言 数据结构之数组模拟实现顺序表流程详解

什么是顺序表?

顺序表是一种基于连续存储结构的数据结构,它可以用一段连续的存储单元来存储线性表中的所有元素。

顺序表的实现思路

顺序表的实现主要依赖数组。我们可以定义一个数组来存储线性表的数据元素,同时再定义一个变量来保存线性表当前的长度。当需要对线性表进行插入、删除、查找等操作时,根据需求,可以通过数组的下标来进行对应元素的操作。

顺序表的实现代码

下面是一个简单的 C 语言代码,实现了一个顺序表的基本操作:创建、插入、删除、查找等。

#define MAXSIZE 100   // 定义顺序表数组的最大长度

typedef struct {
    int data[MAXSIZE];   // 存储顺序表数据元素的数组
    int length;          // 记录顺序表的当前长度
} SqList;

// 初始化一个空的顺序表
SqList InitList() {
    SqList list;
    list.length = 0;
    return list;
}

// 在顺序表的指定位置插入一个元素
int ListInsert(SqList *list, int index, int value) {
    // 判断插入位置是否非法
    if (index < 1 || index > list->length + 1) {
        return 0;
    }

    // 判断顺序表是否已满
    if (list->length >= MAXSIZE) {
        return 0;
    }

    // 将插入位置后的元素依次后移
    for (int i = list->length; i >= index; i--) {
        list->data[i] = list->data[i - 1];
    }

    // 在插入位置上插入新元素
    list->data[index - 1] = value;

    // 更新顺序表的长度
    list->length++;

    return 1;
}

// 从顺序表中删除指定位置的元素
int ListDelete(SqList *list, int index) {
    // 判断删除位置是否非法
    if (index < 1 || index > list->length) {
        return 0;
    }

    // 将删除位置后的元素依次前移
    for (int i = index; i < list->length; i++) {
        list->data[i - 1] = list->data[i];
    }

    // 更新顺序表的长度
    list->length--;

    return 1;
}

// 返回顺序表中指定元素的位置
int LocateElem(SqList *list, int value) {
    for (int i = 0; i < list->length; i++) {
        if (list->data[i] == value) {
            return i + 1;
        }
    }

    return 0;
}

顺序表的应用举例

示例一:输入员工信息,输出第一个工资高于平均水平的员工姓名

#include <stdio.h>

int main() {
    int n;   // 员工人数
    float sum = 0, avg;   // 工资总和、平均工资
    char name[20], max_name[20] = "";   // 员工姓名、工资最高者姓名
    int salary, max_salary = 0;   // 员工工资、工资最高者工资
    SqList list = InitList();   // 创建一个空的顺序表

    // 输入员工信息并将其存入顺序表中
    printf("请输入员工的个数:");
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        printf("请输入第 %d 个员工的姓名和工资:", i);
        scanf("%s %d", name, &salary);
        ListInsert(&list, i, salary);
        sum += salary;
    }

    // 计算平均工资
    avg = sum / n;

    // 找到工资最高者的工资和姓名
    for (int i = 1; i <= n; i++) {
        if (list.data[i - 1] > max_salary) {
            max_salary = list.data[i - 1];
            strcpy(max_name, name);
        }
    }

    // 输出第一个工资高于平均水平的员工姓名
    for (int i = 1; i <= n; i++) {
        if (list.data[i - 1] > avg) {
            printf("%s", name);
            break;
        }
    }

    return 0;
}

示例二:用顺序表实现栈

#include <stdio.h>

#define MAXSIZE 100   // 定义栈的最大长度

typedef struct {
    int data[MAXSIZE];   // 存储栈元素的数组
    int top;             // 栈顶指针
} Stack;

// 初始化一个空栈
Stack InitStack() {
    Stack s;
    s.top = -1;   // 表示栈空
    return s;
}

// 判断栈是否为空
int IsEmpty(Stack *s) {
    return s->top == -1;
}

// 判断栈是否已满
int IsFull(Stack *s) {
    return s->top == MAXSIZE - 1;
}

// 入栈
int Push(Stack *s, int value) {
    if (IsFull(s)) {
        return 0;
    }

    s->top++;
    s->data[s->top] = value;

    return 1;
}

// 出栈
int Pop(Stack *s, int *value) {
    if (IsEmpty(s)) {
        return 0;
    }

    *value = s->data[s->top];
    s->top--;

    return 1;
}

// 获取栈顶元素的值
int Top(Stack *s, int *value) {
    if (IsEmpty(s)) {
        return 0;
    }

    *value = s->data[s->top];

    return 1;
}

int main() {
    Stack s = InitStack();   // 创建一个空栈

    // 入栈
    Push(&s, 1);
    Push(&s, 2);
    Push(&s, 3);

    // 出栈
    int value;
    Pop(&s, &value);
    Pop(&s, &value);

    // 获取栈顶元素的值
    Top(&s, &value);
    printf("栈顶元素的值为:%d\n", value);

    return 0;
}

以上就是关于 C 语言 数组模拟实现顺序表的详细攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 数据结构之数组模拟实现顺序表流程详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Java数据结构之实现哈希表的分离链接法

    Java数据结构之实现哈希表的分离链接法 哈希表是一种非常常用的数据结构,它将数据存储在一个数组中,每个数组元素都存储着链表中的一个节点,这样可以实现高效的数据存储和查找操作。在哈希表中,我们可以通过哈希函数将关键字映射到数组中的特定位置。 但是,当哈希表的负载因子过高时,就会造成哈希冲突,这意味着两个或更多的关键字映射到了同一个数组位置。一种常见的解决方案…

    数据结构 2023年5月17日
    00
  • Oracle 11g Release (11.1) 索引底层的数据结构

    我来为您详细讲解“Oracle 11g Release (11.1) 索引底层的数据结构”的完整攻略。 索引底层数据结构简介 在Oracle数据库中,索引底层数据结构是B树(B-Tree)。B树是一种常用的多路平衡查找树,它的特点是每个节点都有多个子节点,能够自动调整高度,保持所有叶子节点到根节点的距离相等。在B树中,每个节点都有一个关键字列表和一个指向子节…

    数据结构 2023年5月17日
    00
  • 浅谈PHP链表数据结构(单链表)

    介绍 链表是一种常见的数据结构,它包括单链表和双链表,本文中我们将会介绍PHP的单链表数据结构实现,具体而言我们将会实现一个包括插入节点,删除节点,打印节点等基本操作的单链表,帮助读者深入理解PHP链表数据结构。 创建节点 链表数据结构是由一个个节点组成的,我们首先要实现一个节点的创建函数,这个函数接受两个参数,一个是节点数据,另一个是下一个节点的指针地址。…

    数据结构 2023年5月17日
    00
  • 数据结构基本概念和术语之位字节、字、位串、元素等

    我们先来一一解释数据结构中的基本概念和术语: 1. 位 位是计算机中的最小存储单位,通常表示二进制0或1。8个位组成了1个字节,常用于表示和处理计算机中的文件、数据、程序等。 2. 字节 字节是计算机中的基本存储单位之一,由8个位组成,通常表示1个英文字符或者1个二进制数。在计算机存储中,通常以字节为单位进行数据的存储与传输。 3. 位串 一个由0或1构成的…

    数据结构 2023年5月17日
    00
  • C语言数据结构中串的模式匹配

    C语言数据结构中串的模式匹配 什么是字符串的模式匹配? 字符串的模式匹配是指在一个主字符串中查找特定的子串,找到特定的子串后输出其在主字符串中的位置。 例如有一个主串”this is a test string”,要查找的子串为”string”,则字符串的模式匹配应能输出”string”在主串中的位置为17。 如何实现字符串的模式匹配? 字符串的模式匹配可以…

    数据结构 2023年5月17日
    00
  • javascript数据结构与算法之检索算法

    JavaScript 数据结构与算法之检索算法 什么是检索算法 检索算法,也称为查找算法,是解决在数据集合中寻找某个特定元素的算法。 比如,在一个给定的数组中查找特定的元素,或者在一个字典中查找某个特定单词的定义等等,这些都是检索算法的应用场景。 JavaScript 中的检索算法主要有以下几种:线性查找、二分查找、哈希查找。 线性查找 线性查找,也叫顺序查…

    数据结构 2023年5月17日
    00
  • 2021年最新Redis面试题汇总(1)

    下面我将为您详细讲解“2021年最新Redis面试题汇总(1)”的完整攻略。 1. Redis概述 首先,我们需要了解Redis是什么,以及它的特点和应用场景。 1.1 什么是Redis Redis是一种内存中的数据结构存储,可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合,并提供了丰富的功能,如事务、持久化、Lua…

    数据结构 2023年5月17日
    00
  • C语言数据结构之vector底层实现机制解析

    C语言数据结构之vector底层实现机制解析 什么是vector? vector是C++标准库中的一种容器,可以动态调整大小,用于存储数据。 vector的底层实现机制 vector实际上是通过数组实现的,当需要添加元素时,如果当前数组已满,就会重新创建一个更大的数组,并将原数组中的元素复制到新数组中。这样,内存空间得到了增加,同时操作后的元素仍然是顺序存储…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部