首页 > 其他分享 >一些操作线性表的函数及使用方法

一些操作线性表的函数及使用方法

时间:2024-07-18 22:54:21浏览次数:12  
标签:return 线性表 int SeqListPtr list pos printf 操作 函数

线性表的增删查改

头文件seqlist.h

#ifndef SEQLIST
#define SEQLIST
// #include <myhead.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
    datatype data[MAXSIZE];
    int length;
} Seqlist, *SeqListPtr;

// 创建顺序表
SeqListPtr list_create();

// 判空函数
int list_empty(SeqListPtr L);

// 判满函数
int list_full(SeqListPtr L);

// 添加元素
int list_add(SeqListPtr L, datatype e);

// 遍历顺序表
void list_show(SeqListPtr L);

// 定义任意位置插入函数
int list_insert_pos(SeqListPtr L, int pos, datatype e);

// 定义任意位置删除函数
int list_delete_pos(SeqListPtr L, int pos);

// 定义按值查找位置函数
int list_search_value(SeqListPtr L, datatype e);

// 按位置进行修改
int list_update_pos(SeqListPtr L, int pos, datatype e);

// 按值进行修改
int list_update_value(SeqListPtr L, datatype old_e, datatype new_e);

#endif

函数文件seqlist.c

#include "seqlist.h"
// 创建顺序表
SeqListPtr list_create()
{
    SeqListPtr L = (SeqListPtr)malloc(sizeof(Seqlist)); // 申请内存
    L->length = 0;                                      // 原始长度为零
    printf("创建成功\n");
    return L;
}

// 判空函数
int list_empty(SeqListPtr L)
{
    return L->length == 0;
}

// 判满函数
int list_full(SeqListPtr L)
{
    return L->length == MAXSIZE;
}

// 添加元素
int list_add(SeqListPtr L, datatype e)
{
    if (L == NULL || list_full(L))
    {
        printf("添加失败\n");
        return -1;
    }
    // 添加元素
    L->data[L->length] = e;
    // 增加表长
    L->length++;
    printf("添加成功\n");
    return 0;
}

// 打印顺序表
void list_show(SeqListPtr L)
{
    if (L == NULL || list_empty(L))
    {
        printf("空表\n");
    }
    printf("表中的数据是:\n");
    for (int i = 0; i < L->length; i++)
        printf("%d\t", L->data[i]);
    putchar(10);
    printf("长度%d\n", L->length);
}

// 定义任意位置插入函数
int list_insert_pos(SeqListPtr L, int pos, datatype e)
{
    if (L == NULL || list_full(L) || pos < 0 || pos > L->length)
    {
        printf("插入失败\n");
        return -1;
    }
    // 移位
    for (int i = L->length - 1; i >= pos; i--)
    {
        L->data[i + 1] = L->data[i];
    }
    // 增加长度
    L->length++;
    // 插入数据
    L->data[pos] = e;
    printf("插入成功\n");
    return 0;
}

// 定义任意位置删除函数
int list_delete_pos(SeqListPtr L, int pos)
{
    if (L == NULL || list_empty(L) || pos < 0 || pos >= L->length)
    {
        printf("删除失败\n");
        return -1;
    }
    // 移位
    for (int i = pos; i < L->length; i++)
    {
        L->data[i] = L->data[i + 1];
    }
    // 减小长度
    L->length--;
    printf("删除成功\n");
    return 0;
}

// 定义按值查找位置函数
int list_search_value(SeqListPtr L, datatype e)
{
    if (L == NULL || list_empty(L))
    {
        printf("空表\n");
        return -1;
    }
    // 遍历查找
    int flag = 0;
    for (int i = 0; i < L->length; i++)
    {
        if (L->data[i] == e)
        {
            printf("数据下标是%d\n", i);
            flag = 1;
        }
    }
    if (flag == 0)
    {
        printf("没找到\n");
        return -1;
    }
    return 0;
}

// 按位置进行修改
int list_update_pos(SeqListPtr L, int pos, datatype e)

{

    if (NULL == L || pos < 0 || pos >= L->length || list_empty(L))
    {
        printf("修改失败\n");
        return -1;
    }

    // 覆盖数据
    L->data[pos] = e;

    printf("修改成功\n");
    return 0;
}

按值进行修改
int list_update_value(SeqListPtr L, datatype old_e, datatype new_e)
{
     if (L == NULL || list_empty(L))
    {
        printf("空表\n");
        return -1;
    }
     int flag = 0;
    for (int i = 0; i < L->length; i++)
    {
        if (L->data[i] == old_e)
        {
            L->data[i] = new_e;
            flag = 1;
        }
    }
    if (flag == 0)
    {
        printf("没找到\n");
        return -1;
    }
    printf ("修改成功\n");
    return 0;
}

测试文件main.c

#include "seqlist.h"

int main(int argc, char const *argv[])
{
    SeqListPtr L = list_create(); 
    list_add(L, 1);
    list_add(L, 2);
    list_add(L, 3);
    list_add(L, 4);
    list_add(L, 5);
    list_show(L);
    list_insert_pos(L,1,8);
    list_delete_pos(L,3);
    list_search_value(L,4);
    list_show(L);
    list_update_pos(L,5,7);
    list_update_value(L,1,5);
    list_show(L);
    return 0;
}

附加知识

vim编辑器配置C语言程序片段
  1. 先找到文件夹:/home/ubuntu/.vim/snippets

打开其中的c.snippets并编辑

标签:return,线性表,int,SeqListPtr,list,pos,printf,操作,函数
From: https://blog.csdn.net/sjrhsk_hahaha/article/details/140377144

相关文章

  • idea内置数据库 + sql语句库表操作
    表数据操作,表是上一个博客里的表tb_emp--dml:数据操作语言--dml:插入数据-insert--1.为tb_emp表的username,name,gender字段插入值--所有用到引号的地方,用单引号双引号都可以insertintotb_emp(username,name,gender,crate_time,update_time)value('red','小红',1......
  • 从操作系统层面认识Linux
     描述进程-PCBLinux操作系统下的PCB是:task_structhttps://www.cnblogs.com/tongyan2/p/5544887.htmlhttps://www.cnblogs.com/tongyan2/p/5544887.html校招必背操作系统面试题-什么是PCB(进程控制块)?_哔哩哔哩_bilibili校招必背操作系统面试题-什么是PCB(进程控制块)?,视......
  • SQL中用于处理条件逻辑和空值的函数
    在SQL中,CASEWHEN语句、COALESCE函数、IF函数(在某些数据库系统中,如MySQL)、IFNULL函数(同样在MySQL等中)以及NULLIF函数都是用于处理条件逻辑和空值(NULL)的重要工具。下面分别介绍这些函数,并提供相应的使用示例。CASEWHEN语句CASEWHEN是SQL中的条件表达式,允许你根据一系列条......
  • 【C++】内联函数
    目录前言一、内联函数的概念二、内联函数的特征三、总结:四、如何在vs2022查看反汇编以及debug模式下查看inline反汇编需要调整的配置。4.1查看反汇编4.1debug模式下查看inline反汇编需要调整的配置结尾前言各位友友好,我们又见面了!本节我们将进入C++基......
  • Z 函数(扩展KMP)
    author:LeoJacob,Marcythm,minghu6约定:字符串下标以\(0\)为起点。定义对于一个长度为\(n\)的字符串\(s\),定义函数\(z[i]\)表示\(s\)和\(s[i,n-1]\)(即以\(s[i]\)开头的后缀)的最长公共前缀(LCP)的长度,则\(z\)被称为\(s\)的Z函数。特别地,\(z[0]=0\)。国外一......
  • 嵌入式学习——C语言字符数组及其函数
    目录一、字符数组    1、定义    2、初始化                    3、引用字符数组元素二、字符串和字符串结束的标志三、字符数组的输入输出        1、字符串的输入:scanf    2、注意事项四、字符串处理函数......
  • 第八章函数及常用的内置函数
    函数的定义和调用1、内置函数:输出函数print()输入函数input()列表定义的函数list()2、自定义函数def函数名称(参数列表):函数体[return返回值列表]3、函数调用函数名(参数列表)不带返回值的函数直接调用,带返回值的函数调用后要将结果保存到变量中点击查看......
  • 扩展 KMP/exKMP(Z 函数)学习笔记
    声明本文章转载自shangruolin的博客,已经过作者(存疑)同意,帮TA宣传一下。扩展KMP/exKMP(Z函数)学习笔记兼P10479匹配统计题解。LCP:最长公共前缀。Z函数,又称扩展KMP(exKMP),能够在\(O(n)\)的时间内求出一个字符串与其所有后缀的LCP的长度。定义\(z_i\)为字符串\(s\)......
  • 【算法】JZ30 包含min函数的栈
    1.概述描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,输入操作时保证pop、top和min函数操作时,栈中一定有元素。此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素......
  • [php命令执行函数]详解各种php命令执行函数
    如下几种命令执行函数:目录systemexcpassthrushell_exec反引号``popensystemsystem函数简介:用于执行命令语法形式:system(string$command,int$return_var=?)command:必选参数,字符类型,被system函数执行的命令,如lsreturn_var:可选参数,整数类型,如果提供此参数,则com......