数据结构 顺序表 -- C语言实现
顺序表
概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存
储。在数组上完成数据的增删查改。
顺序表一般可以分为:
- 静态顺序表:使用定长数组存储元素。
- 动态顺序表:使用动态开辟的数组存储。
代码实现
动态顺序表
静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空
间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间
大小,下面实现动态顺序表。
SeqLish.h
#define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<stdio.h> typedef int SLDataType; #define FORMAT "%d" //格式 typedef struct SeqList { SLDataType *a; int size; int capacity; }SL; //初始化 void InitSeqList(SL*ps);// //打印 void Print(SL*ps); //尾插 void PushBack(SL* ps,SLDataType x); //头插 void PushFront(SL*ps, SLDataType x); //尾删 void PopBack(SL*ps); //头删 void PopFront(SL*ps); //内存释放 void SLDestory(SL*ps); //查找 int SLFind(SL*ps); //插入 void SLInsert(SL*ps, int pos, SLDataType x);
SeqList.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"SeqList.h" void InitSeqList(SL*ps) { ps->size = ps->capacity = 0; //ps->a = (SL*)realloc(ps->a, (ps->capacity)*sizeof(SL)); ps->a = NULL; } void Print(SL*ps) { int i = 0; while (i<=ps->size-1) { printf(FORMAT, ps->a[i++]); } printf("\n"); } void checkcapacity(SL*ps) { if (ps->size == ps->capacity) { //扩容二倍是个适中的方式 int newcapacity = ps->capacity == 0 ? 4 : 2 * (ps->capacity); SLDataType *ptr = (SLDataType *)realloc(ps->a, newcapacity* sizeof(SLDataType)); if (ptr == NULL) { perror("realloc fail"); //exit(-1); return; } ps->a = ptr; ps->capacity = newcapacity; } } void PushBack(SL*ps, SLDataType x) { checkcapacity(ps); ps->a[ps->size] = x; ps->size++; } void PushFront(SL*ps, SLDataType x) { checkcapacity(ps); int end = ps->size-1; for (; end >= 0;end--) { ps->a[end+1] = ps->a[end]; } ps->a[0] = x; ps->size++; } void PopBack(SL*ps) { if (ps->size > 0) { ps->size--; } } void PopFront(SL*ps) { if (ps -> size >= 0) { int begin = 0; for (; begin < ps->size - 1; begin++) { ps->a[begin] = ps->a[begin + 1]; } } ps->size--; } //内存释放 void SLDestory(SL*ps) { free(ps->a); ps->a == NULL; } int SLFind(SL*ps) { { SLDataType x = 0; scanf(FORMAT, &x); if (ps->size > 0) { int begin = 0; for (; begin <= ps->size - 1; begin++) { if (strcmp(ps->a[begin], x) == 0) return begin; } return -1; } } } //position:等级位置,定位(立场,高度) location:位置 void SLInsert(SL*ps, int pos, SLDataType x) { ; } void SLErase(SL*ps, int pos) { ; }
线性表区分
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使
用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理上存储时,通常以数组或链式结构的形式存储。
本文来自博客园,作者:HJfjfK,原文链接:https://www.cnblogs.com/DSCL-ing/p/18344047
合集:
初阶数据结构-C语言实现
分类:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了