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

C语言实现顺序表二

时间:2023-10-16 20:22:19浏览次数:39  
标签:index 顺序 return int list C语言 length 表二 data


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

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100         /* 表示线性表的最大长度 */


// 定义一个顺序表节点
struct SNode {
    // 用来存储书序表中的数据(动态分配数组)
    char *data;
    // 表示线性表的当前长度
    int length;
};


// 起个别名
typedef struct SNode node;
typedef struct SNode * SeqList;


// 1. 初始化一个空线性表
int init_list(SeqList list) {
    
    // 初始化线性表的数组
    list->data =malloc(MAXSIZE * sizeof(char));
    
    // 判断是否动态分配内存失败
    if (!list->data) {
        exit(-2);
    }
    
    // 设置线性表长度为 0
    list->length = 0;
    
    return 1;
}


// 2. 根据索引读取元素值
int read_data(SeqList list, int index, char *e) {
    // 1. 判断索引是否合法
    if (index < 0 || index >= list->length) {
        return 0;
    }
    
    *e = list->data[index];
    
    return 1;
}

// 3. 插入。
int insert_data(SeqList list, int index, char data) {
    
    // 1. 判断线性表是否已满
    if (list->length == MAXSIZE) {
        printf("线性表已满。\n");
        return 0;
    }
    
    // 2. 判断插入位置是否合法
    if (index < 0 || index > list->length) {
        printf("插入位置不合法。\n");
        return 0;
    }
    
    // 3. index 及后续元素后移,并执行插入操作
    for (int i = list->length - 1; i >= index; i--) {
        list->data[i+1] = list->data[i];
    }
    // 执行插入操作
    list->data[index] = data;
    list->length++;
    
    return 1;
}

// 4. 求表长
int length(SeqList list) {
    return list->length;
}


// 5. 删除操作。删除指定索引处的元素
int delete_data(SeqList list, int index) {
    if (!list) {
        printf("链表为空.\n");
        return 0;
    }
    
    // 1. 判断 index 是否合法
    if (index < 0 || index >= list->length) {
        printf("要删除的索引位置不合法。\n");
        return 0;
    }
    
    // 2. 移动元素。
    // 将 index + 1 及以后的所有元素都前移一位
    for (int i = index; i < list->length; i++) {
        list->data[i] = list->data[i+1];
    }
    
    // 3. list->length-- 操作
    list->length--;
    
    return 1;
    
}

// 打印输出该顺序表的信息
void print_list(SeqList list) {
    if (!list) {
        printf("该顺序表为空。\n");
        return;
    }
    
    for (int i = 0; i < list->length; i++) {
        printf("第 %d 个元素是:%c \n", i, list->data[i]);
    }
}





int main(int argc, const char * argv[]) {
    
    // 创建一个链表的节点
    struct SNode list;
    
    // 1. 初始化一个空的顺序表
    init_list(&list);
    
    // 2. 插入一些数据
    for (int i = 0; i < 5; i++) {
        insert_data(&list, i, 'a' + i);
    }
    
    // 3. 求表长
    int len = length(&list);
    printf("该顺序表长度为:%d\n", len);
    
    // 4. 输出该列表信息
    print_list(&list);
    
    // 3. 根据索引找出元素
    char ch;
    read_data(&list, 3, &ch);
    printf("索引为 3 的元素是 %c.\n", ch);
    
    
    // 4. 根据索引删除某个元素
    delete_data(&list, 3);
    // 重新求表长
    len = length(&list);
    printf("删除元素后, 表长为:%d \n", len);
    
    // 重新输出表中所有内容
    print_list(&list);
    
    printf("插入新元素 Z \n");
    
    
    
    // 在指定索引位置插入一个新的元素
    
    insert_data(&list, 2, 'Z');
    print_list(&list);
    
    
    
    
    return 0;
}

标签:index,顺序,return,int,list,C语言,length,表二,data
From: https://www.cnblogs.com/zxhoo/p/17768252.html

相关文章

  • 实验2 C语言分支与循环基础应用编程
    一、实验目的能正确使用if语句、switch语句实现分支结构能正确使用while语句、do...while语句、for语句实现循环结构能在具体问题场景中使用嵌套分支语句和嵌套循环语句能在具体问题场景中正确区分、使用continue和break能灵活、组合使用c语句编程解决简单应用问题二、实......
  • 实验2 C语言分支与循环基础应用编程
    练习1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0;i<N;++i){number=rand()%(N2-N1......
  • 实验2_C语言分支与循环基础应用编程
    1.task_11#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));1516for......
  • 最优性剪枝,可行性剪枝,优化搜索顺序,排除等效冗余
    杨辉三角:  //https://www.luogu.com.cn/problem/P1118//最优性剪枝://由高中知识可得,abcd四个数符合杨辉三角的数相乘,即//res=a+3*b+3*c+d,前面的常数项也就是杨辉三角的数字//根据此结论,进行剪枝//由于暴力枚举全排列+部分剪枝不可过,所以要考虑方法性剪枝......
  • 线性表-顺序表
    1.概念理解:顺序线性表有点像数据,在物理空间上是顺序排序的2.顺序表的存储:#defineSQLMAXSIZE100typedefsturct__SqlElemType{intnumber;charname;floatscore;}SqlElemType;//先定义每个元素中所包含的类型,也就是一个数据元素结构typedefstruct__Sqlist{SqlElemT......
  • 20231407陈原《计算机科学与概论》及《C语言程序设计》第三周学习情况
    [2022-2023-1-计算机基础与程序设计]2023-2024-1计算机基础与程序设计第三周作业https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP[2022-2023-1计算机基础与程序设计第一周作业](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03)作业目标学习《计算机科......
  • C 语言实现顺序表一
    ////main.c//SeqList////Createdbystevexiaohuzhaoon2023/10/15.//#include<stdio.h>#include<stdlib.h>#defineMAXSIZE100//定义一个顺序表的节点structLNode{//用char类型数组来保存数据chardata[MAXSIZE];intlength;};......
  • 初识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循环有所提升。时间复杂......