首页 > 其他分享 >C 语言实现顺序表一

C 语言实现顺序表一

时间:2023-10-15 21:44:09浏览次数:30  
标签:index 顺序 return 语言 int seqList list length 表一

//
//  main.c
//  SeqList
//
//  Created by steve xiaohu zhao on 2023/10/15.
//

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100


// 定义一个顺序表的节点
struct LNode {
    // 用 char 类型数组来保存数据
    char data[MAXSIZE];
    int length;
};

// 起个别名
typedef struct LNode node;
typedef struct LNode * seqList;

// 1. 初始化一个空的顺序表
seqList makeEmpty(void) {
    // 声明一个节点指针
    seqList ptr;
    // 动态分配一个节点空间
    ptr = (seqList)malloc(sizeof(node));
    
    // 设置顺序表长度
    ptr->length = 0;
    // 返回该顺序表
    return ptr;
}


// 2. 查找。查找 e 第一次出现的索引位置
int find(char e, seqList list) {
    int i = 0;
    while (i < list->length && list->data[i] != e) {
        i++;
    }
    if (i >= list->length) {
        return -1;
    } else {
        return i;
    }
}

// 3. 插入操作。将给定元素插入到索引为 index 的位置
int insert(char e, int index, seqList list) {
    // 1. 判断表是否已满
    if (list->length == MAXSIZE) {
        printf("该顺序表已满。\n");
        return 0;
    }
    
    // 2. 检查插入位置的合法性
    if (index < 0 || index > list->length) {
        printf("插入位置不合法。");
        return 0;
    }
    
    // 3. 执行插入操作
    // 3.1 将 index 位置及其以后得元素都向后移动一个位置
    for (int i = list->length - 1; i >= index; i--) {
        list->data[i + 1] = list->data[i];
    }
    // 3.2 将要插入的元素放到 list->data[index] 位置,并且长度+1
    list->data[index] = e;
    list->length++;
    
    return 1;
}

// 4. 删除操作。删除索引为 index 的元素
int delete(int index, seqList list) {
    // 判断 index 是否合法
    if (index < 0 || index >= list->length) {
        printf("不存在索引为 index 的元素。\n");
        return 0;
    }
    
    // 将索引为 index + 1 的, 以及直到最后的所有的所有元素都前移一个
    for (int i = index + 1; i < list->length; i++) {
        list->data[index] = list->data[index+1];
    }
    
    // 更新 list->length
    list->length--;
    
    return 1;
    
}


// 5. 根据索引读取某个元素
//char * getElement(seqList list, int index) {
//    if (index < 0 || index >= list->length) {
//        printf("索引 %d 不合法。", index);
//        return NULL;
//    }
//    return &list->data[index];
//}

int readElement(seqList list, int index, char *e) {
    if (index < 0 || index >= list->length) {
        return 0;
    }
    
    *e = list->data[index];
    return 1;
}

// 6. 输出顺序表
void printSeqList(seqList list) {
    for (int i = 0; i < list->length; i++) {
        printf("第 %d 个元素是:%c \n", i, list->data[i]);
    }
}



int main(int argc, const char * argv[]) {
    
    // 测是顺序表
    
    // 1. 创建一个空的顺序表
    seqList list = makeEmpty();
    printf("1顺序表长度为:%d \n", list->length);
    
    // 2. 向顺序表中插入数据
    char temp[10];
    for (int i = 0 ; i < 10 ; i++) {
        // 将整数 i, 转换为 字符 i
        sprintf(temp, "%d", i);
        insert(temp[0], i, list);
    }
    
    printf("2顺序表长度为:%d \n", list->length);
    // 输出
    printSeqList(list);
    
    
    // 读取某个元素
    char c;
    readElement(list, 4, &c);
    printf("索引为 4 的元素是:%c \n", c);
    
    
    
    return 0;
}

标签:index,顺序,return,语言,int,seqList,list,length,表一
From: https://www.cnblogs.com/zxhoo/p/17766249.html

相关文章

  • Scala语言入门:初学者的基础语法指南
    本文已收录至GitHub,推荐阅读......
  • 用Java语言简单实现MQ消息队列服务
    大致的结构:一个消息队列大致的结构:消息处理中心Brokerpackagecom.tntxia;importjava.util.concurrent.ArrayBlockingQueue;/***消息处理中心*/publicclassBroker{//队列存储消息的最大数量privatefinalstaticintMAX_SIZE=3;//保存消息数据......
  • 初识C语言(2)
    一、常量1.字面常量即数字本身,例如:3,100,3.14intmain(){ intnum=4; printf("%d\n",num); num=8; printf("%d\n",num); return0;2.常变量const-常属性(赋予一个变量常属性,变量→常变量(当然其本质上还是个变量),如下图,num变为const修饰的常变量,它的值无法改变intmain()......
  • C语言数据类型占用字节大小+rand_mode/randomize_mode/static constraint+I2C和SPI的
    C语言数据类型占用字节大小https://blog.csdn.net/sinan1995/article/details/79577106对于整形,最大8字节,超出8字节的计算,要么用库,要么不用。64位编译器:char/unsignedchar:1字节char*:8字节shortint:2字节int/unsignedint:4字节longint:8字节float:4字节double:8字节lon......
  • C语言快速排序详解
    【1】快速排序核心思想核心思想是分而治之,每一轮排序都会选出一个基准,一轮排序完成后,所有比基准小的数一定在左边,比基准大的数一定在右边,在分别通过同样的方法对左右两边的数组进行排序,不断划分,最后完成整个数组的排序。它的效率相比冒泡排序的双重for循环有所提升。时间复杂......
  • 数据结构和算法基础(Java语言实现)pdf电子版柳伟卫2021年
    数据结构和算法基础(Java语言实现)pdf电子版下载作者: 柳伟卫出版年: 2021-11ISBN: 9787301325872下l载连接最新Java领域的算法、数据结构方面的知识书籍。越是基础越是重要!......
  • Android 语言国际化的思考
    在测试一个应用https://github.com/jd1378/otphelper,使用了虚拟机,然后在原生nexus上的系统设置里添加中文的时候,默认只有English,我输出Chin后就跳出来简体中文给我选中。在otphelper中,也是有语言可以选择的,然后我在搜索栏里输出Chinese,是搜索不到“简体中文”的,输入“中文......
  • 探秘Java语言中子类调用父类的构造方法的方式
    父类的构造方法不能被子类继承。假定Base父类有以下构造方法:publicBase(Srtingmsg){this.msg=msg;}以下Sub类继承了Base类:publicclassSubextendsBase{}以上Sub类有一个隐含的默认构造方法,形式如下:publicSub(){}尽管在Base父类中定义了如下形式的构造方法:publicBase(Str......
  • Java面试题支招-为什么Java语言不支持多继承
    这是非常经典的问题,与“为什么String类在Java中是不可变的”很类似;这两个问题之间的相似之处在于它们主要是由Java创作者的设计决策使然。Java不支持类的多继承。因为多继承会增加编程的复杂性。下图选自孙卫琴的经典Java书籍《漫画Java编程》当一个子类有多个父类可能出......
  • 嵌入式 C 语言程序数据基本存储结构
    一、5大内存分区内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。1、栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。2、堆区(heap):就是那些由new分配的内存块,它们的释......