数据结构(2)线性表

线性表顺序存储

线性表的静态分配

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int data_t;
#define N 100
typedef struct 
{
    data_t data[N];/* data */
    int length;
}sqlist,*sqlink;
sqlink list_creat()
{
    sqlink L;
    L=(sqlink)malloc(sizeof(sqlist));
    if(L==NULL)
    {printf("list malloc failed");
    return L;}

    memset(L,0,sizeof(sqlist));
    L->length=0;
    return L;

}
int list_clear(sqlink L)
{
    if(L=NULL)
    return -1;
    memset(L,0,sizeof(sqlist));
    L->length=0;
    return 0;
}
int list_insert(sqlink L, data_t value, int pos) {
    int i;

    //full
    if (L->length == N) {
        printf("list is full\n");
        return -1;
    }

    //check para   0<=pos<=Last+1  [0, last+1]
    if (pos < 0 || pos > L->length) {
        printf("Pos is invalid\n");
        return -1;
    }

    //move
    for (i = L->length-1; i >= pos; i--) {
        L->data[i+1] = L->data[i];
    }

    //update value 
    L->data[pos] = value;
    L->length++;
}
int main()
{
    sqlink L;
    L=list_creat();


}

特点:分配内存固定,容易存在溢出或内存浪费问题

动态分配

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

// 动态分配顺序表结构定义
#define InitSize 10  // 初始长度

typedef int ElemType;
typedef struct 
{
     ElemType *data;  /* data */
    int length;
    int Maxsize;
}sqlist,*sqlink;

void Initlist(sqlink L)
{
    L->data=(ElemType*)malloc(sizeof(sqlist));
    L->length=0;
    L->Maxsize=InitSize;

}
void IncreaseSize(sqlink L,int len)
{
    ElemType *p=L->data;
    L->data=(ElemType)malloc((L->Maxsize+len)  *sizeof(ElemType));
    for(int i=0;i<L->length;i++){
        L->data[i]=p[i];

    }
    L->Maxsize=L->Maxsize+len;
    free(p);
}

特点:数据的存储地址在结构体外面,通过结构体成员指针指向数据存放内存的初始地址,可随时申请更大的内存空间来存放数据

线性表的顺序存储缺点

线性表的顺序存储结构有存储密度高及能够随机存取等优点,但存在以下不足:

(1)要求系统提供一片较大的连续存储空间。

(2)插入、删除等运算耗时,且存在元素在存储器中成片移动的现象

线性表链式存储

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
typedef int data_t;
typedef struct node
{
    data_t data;
    struct node* next;
    
}LNode,* Linklist;

void InitList(Linklist L){
    L=(Linklist*)malloc(sizeof(LNode));
    L->next=NULL;
}
相关推荐
叉烧滑蛋1 小时前
B站台湾大学郭彦甫|MATLAB 学习笔记|04 变量与档案存取
数据结构
j7~2 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py3 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing3 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客3 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法
not coder4 小时前
一文讲通--从树到红黑树
数据结构·算法
octopus_c4 小时前
C++ 入门
开发语言·c++·算法
爱吃香菜的初学者5 小时前
八.数据结构——哈希表(1)
数据结构·散列表
ZhengEnCi5 小时前
2026年10月30日AI早报:Gemini 4 Carbon登顶、DeepSeek融资1055亿、智元机器人上岗实测
人工智能·算法
强哥聊算力5 小时前
《算力江湖·Intel帝国往事》第三集:安迪·格鲁夫的铁血时代:Intel为什么能把对手逼到墙角?
运维·人工智能·科技·算法·ai·gpu算力