首页 > 其他分享 >C数据结构-线性表之顺序表

C数据结构-线性表之顺序表

时间:2023-09-09 18:23:43浏览次数:43  
标签:顺序 return 线性表 int list sqlist 数据结构 data sqlink

什么是线性表


线性表的插入元素


线性表的删除元素


线性表顺序存储的缺点

线性表的特点

1.线性表的实例

首先我们创建3个文件,分别如下:
liner_data
--sqlist.c
--sqlist.h
--test.c

sqlist.h
// .h文件中定位数据的结构以及函数的方法
typedef int data_t;
#define N 128  //定义一个宏

typedef struct {
    data_t data[N];
    int last;
} sqlist, *sqlink;

sqlink list_create();
int list_clear(sqlink L);
int list_delete(sqlink L);
int list_empty(sqlink L);
int list_length(sqlink L);
int list_locate(sqlink L, data_t value);
int list_insert(sqlink L, data_t value, int pos);
int list_show(sqlink L);

下面编写sqlist.c文件:函数实现的功能

//
// Created by Lenovo on 2023/9/9.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlist.h"

sqlink list_create(){
    // malloc
    sqlink L;

    L = (sqlink)malloc(sizeof(sqlist));
    if(L == NULL){
        printf("list malloc failed\n");
        return L;
    }

    // initialize
    memset(L, 0, sizeof(sqlist)); // 向数组中除了最后一个,其他全部初始化为0
    L->last = -1;
    return L;
}

int list_clear(sqlink L){
    /*
     * @return: 0-success   -1-failed
     */
    if(L == NULL){
        return -1;
    }
    memset(L, 0, sizeof(sqlist));
    L->last = -1;
    return 0;
}

int list_delete(sqlink L){
    if(L==NULL)
        return -1;
    free(L);  // 删除堆内存
    L=NULL;
    return 0;
}

/*
 * list_empty: Is list empty?
 * para L: list
 * @return: 1-empty   0-not empty
 */
int list_empty(sqlink L){
    if(L->last == -1)
        return 1;
    else
        return 0;
}

int list_length(sqlink L){
    if(L==NULL)
        return -1;
    return (L->last+1);
}

int list_locate(sqlink L, data_t value){
    return 0;
}

int list_insert(sqlink L, data_t value, int pos){
    int i;
    // 判断是否满了full?
    if(L->last == N-1){
        printf("list is full\n");
        return -1;
    }
    // check para    0<=pos<=last+1     [0, last+1]
    if(pos<0 || pos>L->last+1){
        printf("Pos is invalid\n");
        return -1;
    }
    //move
    for (i=L->last; i>=pos; i--){
        L->data[i+1] = L->data[i];
    }
    // update value last
    L->data[pos] = value;
    L->last++;
    return 0;
}

int list_show(sqlink L){
    int i;
    if (L==NULL)
        return -1;
    if(L->last == -1)
        printf("list is empty\n");
    for(i=0; i<=L->last; i++){
        printf("%d ", L->data[i]);
    }
    puts(""); // 自动换行
    return 0;
}

test.c文件:main函数的执行入口

//
// Created by Lenovo on 2023/9/9.
//
#include <stdio.h>
#include "sqlist.h"

void test_insert(){
    sqlink L;

    L=list_create();
    if (L==NULL)
        return;
    list_insert(L, 10, 0);
    list_insert(L, 20, 0);
    list_insert(L, 30, 0);
    list_insert(L, 40, 0);
    list_insert(L, 50, 0);

    list_show(L);
    list_insert(L, 100, -1000);
    list_show(L);
    list_delete(L);
}

int main(){
    test_insert();

    return 0;
}

2.执行步骤

2.1 使用gcc进行编译

c语言程序编译的过程如下:

预编译-编译-汇编-连接
汇编:gcc -c sqlist.c -o sqlist.o
gcc -c test.c -o test.o
连接:可执行文件:gcc sqlist.o test.o -o test

以上3步可直接等价于:gcc *.c -o test
程序运行成功:

标签:顺序,return,线性表,int,list,sqlist,数据结构,data,sqlink
From: https://www.cnblogs.com/dack-zt-deng/p/17689942.html

相关文章

  • 9.9数据结构
    ADT抽象数据类型:数据抽象、数据封装特点:数据封装,实现与现实分离,信息隐藏 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理数据项:是组成数据元素的,有独有的含义,不可分割的最小单位 在计算机中存储数据时,通常不仅要存储各数据元素的值,还要存储数据元素......
  • 顺序、选择、循环
    title:顺序、选择、循环index_img:https://tuchuangs.com/imgs/2023/07/22/860e4047323f0b1c.pngtags:-JavaSEcategories:-JavaSEhide:falseexcerpt:StringBuilder、常用方法、链式编程顺序结构程序按从上到下的顺序执行。publicclassMain{public......
  • 合并顺序表
    例2.3有两个顺序表LA和LB,其元素均为非递减有序排列,编写算法,将它们合并成一个顺序表LC,要求LC也是非递减有序排列。例如,LA=(2,2,3),LB=(1,3,3,4),则LC=(1,2,2,3,3,3,4)。【算法思想】设表LC是一个空表,为使LC也是非递减有序排列,可设两个指针i、j分别指向表LA和LB中的元素,若LA.el......
  • 数据结构-封装队列
    list_queue.h#ifndefLIST_QUEUE_H#defineLIST_QUEUE_H#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#defineTYPEint// 节点结构typedefstructNode{ TYPEdata; structNode*next;}Node;// 设计链式队列结构typedefstructList......
  • 并行编程(二)Julia中的顺序和异步编程
    概述这节课的主要目标是开始使用Julia编程,实现并行算法,本次课程中,特别关注语言的部分(函数式和异步编程)。 学习目标运行Julia代码安装Julia软件包编写连续的Julia代码使用Julia的函数式编程功能使用Julia的异步编程功能 WhyJulia?与高性能计算相关的课程通常使用C、C......
  • 数据结构-表
    表: 顺序(数组)、链式(链表)一、顺序表数据项:存储元素的内存首地址表的容量元素的数量运算:创建、销毁、清空、插入、删除、访问、查询、修改、排序、遍历注意:1、要确保数据元素的连续性2、不能越界array顺序表#include<stdio.h>#include<stdbool.h>#......
  • linux中实现去重复且保持原来的顺序
     001、去重复保持原来的顺序[root@pc1test01]#lsa.txt[root@pc1test01]#cata.txt##测试数据125533774[root@pc1test01]#awk'ay[$0]++'a.txt##输出重复项,且保持原来的顺序537[root@pc1test01]#awk'!ay[$0]++'a.txt##去除......
  • Qt图形视图框架事件传递顺序
     全文链接:http://www.fearlazy.com/index.php/post/111.html Qt为我们提供的图形视图框架真的是非常好用,它通过分解出视图、场景和图元降低了我们绘制图形的难度。它提供了强大图元控制能力,如快速查找图元、检测图元位置、检测图元碰撞等。除此以外图形视图框架还有一个很强大......
  • 数据结构-栈
    栈:只有一个出入口的表结构,先进后出,FILO表栈顶操作一、顺序栈数据项:存储元素的内存首地址栈的容量栈顶位置运算:创建、销毁、入栈、出栈、栈顶、栈空、栈满、数量栈相关的概念:假设栈容量为cal空增栈:top:0开始 先入栈,再top++,存储地址由低到高满增栈:top:-1开始......
  • 数据结构代码题-栈、队列
    目录栈、队列栈队列栈和队列的应用栈、队列栈栈的定义#defineMaxSize100//储存空间的初始分配量typedefintElemType;typedefstruct{inttop;//栈顶指针ElemTypedata[MaxSize];//存放元素的动态数组空间}sqstack;链栈的数据结构描述type......