数据结构------顺序表的增删改查
- 顺序表
顺序表:存储的数据在物理内存上是连续的,内存地址连续。
顺序表的最大特点:支持随机访问,即想访问顺序表中第一个就访问第一个,想访问最后一个就访问最后一个,且时间复杂度为O(1)

- 代码实现顺序表的创建、增删(查改待添加)
/*************************************************************************
* file name:sequencelist
* function: 实现对顺序表的增删改查功能
* date: 2025.5.14
* note:none
* Copyright (c) 2024-2025 l550036303@163.com All right reserved
**************************************************************************/
typedef int elementtype_t;
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct SequenceList {
elementtype_t * Addr; //表示顺序表的首地址 此定义方式可以根据自己的情况来调节所需长度
unsigned int size; //表示顺序表的空间大小
int last; //表示顺序表最末尾的数据的序号
}seqlist_t; //规范命名需要加 "_t"
bool seqlist_IsFull(seqlist_t * manager);
bool seqlist_movelist(seqlist_t *manager,int location);
/*************************************************************************
* name:seqlist_creat
* function: 实现对顺序表的创建
* argument:
* @size 表示所创建的顺序表的空间大小
* reval:返回指向顺序表的指针
* date: 2025.5.14
* note:none
**************************************************************************/
//创建顺序表
seqlist_t * seqlist_creat(unsigned int size){
seqlist_t *manager = (seqlist_t *)calloc(1,sizeof(seqlist_t));
//给seqlist分配空间失败的错误处理
if(NULL == manager){
perror("manager creat fault for seqlist creat");
exit(-1);
}
manager->Addr = (elementtype_t *)calloc(size,sizeof(elementtype_t));
//给Addr分配空间失败的错误处理
if(NULL == manager->Addr ){
perror("manager creat fault for Addr creat");
exit(-1);
}
manager->size = size;
manager->last = -1;
return manager;
}
/*************************************************************************
* name:seqlist_add_last
* function: 在顺序表最后插入数据元素
* argument:
* @manager 需要插入的目标顺序表
* @element 要插入的数据
* reval:
* date: 2025.5.14
* note:none
**************************************************************************/
bool seqlist_add_last(seqlist_t * manager,int element){
if(seqlist_IsFull(manager)){
printf("\tlist is full , add fail\n");
return false;
}
// 把last向后+1 , 然后把element的值给所指的位置,实现插入
manager->Addr[++manager->last] = element;
printf("\tlast\tadd\tsuccess\n");
return true;
}
/*************************************************************************
* name:seqlist_add_last
* function: 在顺序表的头部插入一个数据元素
* argument:
* @manager 需要插入的目标顺序表
* @element 要插入的数据
* reval:
* date: 2025.5.14
* note:element应该是int数据
**************************************************************************/
bool seqlist_add_top(seqlist_t * manager,int element){
int top = 0;
if(seqlist_IsFull(manager)){
printf("\tlist is full , add fail\n");
return false;
}
seqlist_movelist(manager,top);
manager->Addr[0]= element;
printf("\ttop\tadd\tsuccess\n");
return true;
}
/*************************************************************************
* name:seqlist_movelist
* function:让顺序表中的部分元素向后移动一个位置,辅助实现插入功能
* argument:
* @manager 需要移动的顺序表
* @location 从顺序表的哪个下标开始移动
* reval: 以布尔类型返回结果
* true 移动完成
* false移动失败
* date: 2025.5.14
* note:none
**************************************************************************/
bool seqlist_movelist(seqlist_t *manager,int location){
if(location > manager->size && location < 0 ){
return false;
}
for(int i= manager->last; i >= location;i--){
manager->Addr[i+1] =manager->Addr[i];
}
manager->last++;
return true;
}
/*************************************************************************
* name:seqlist_IsFull
* function:判断此顺序表是否已满,还有没有剩余空间
* argument:
* @manager 需要判断的顺序表
* reval: 以布尔类型返回结果
* true 还有空间
* false没有空间了
* date: 2025.5.14
* note:none
**************************************************************************/
bool seqlist_IsFull(seqlist_t * manager){
if( (manager->last)+1 >= manager->size){
//空间已满
return true;
}
//还有空间
return false;
}
/*************************************************************************
* name:seqlist_print
* function:打印该顺序表中的元素
* argument:
* @manager 需要打印的顺序表
* reval: 以布尔类型返回结果
true打印成功
false打印失败,出现问题
* date: 2025.5.14
* note:none
**************************************************************************/
bool seqlist_print(seqlist_t *manager){
if(NULL == manager){
printf("this sequencelist is empty\n");
return false;
}
for(int i=0;i<=manager->last;i++){
if(0==i){
printf("This sequenlist :\n");
}
printf("\tnumber:%d\tvalue:%d \n",i+1,(manager->Addr[i]));
}
return true;
}
int main(int agrc,char const *argv[]){
seqlist_t * manager = seqlist_creat(10);
seqlist_add_last(manager,100);
seqlist_add_last(manager,200);
seqlist_add_top(manager,10);
seqlist_add_top(manager,50);
seqlist_add_last(manager,300);
seqlist_print(manager);
return 0;
}

浙公网安备 33010602011771号