次序表的实现
次序表功能
- 次序表初始化
- 次序表插入元素
- 次序表删除元素
- 次序表查找元素
- /*****************************************************
- * file name:sequencelist.c
- * author :zzlyx1239@126.com
- * date :2025.3.10
- * brief :顺序表的实现
- * note :none
- *
- * Copyright (c) 2025 zzlyx1239@126.com All Right Reserved
- *
- *******************************************************/
- #include <stdio.h>
- #include <stdbool.h>
- #include <stdlib.h>
- /********************************************************
- *
- * func name :
- * brief :
- * func parameter:
- *
- * return :none
- * note :none
- * func author :zzlyx1239@126.com
- * data :2025/3/10
- * version :V1.0
- *
- **************************************************************/
- //宏定义顺序表中的数据类型
- typedef int DataType_t;
- //定义一个顺序表结构体,声明顺序表首地址,大小,最后一个数据下标等各项参数
- typedef struct SequenceList
- {
- DataType_t *Addr;//声明顺序表首地址
- int Size;//声明顺序表大小
- int Last;//声明顺序表最后一个元素数组下标
- }SeqList_t;
- //创建顺序列表并进行初始化
- SeqList_t* SeqList_Creat(unsigned int size)
- {
- //1.为所有顺序表管理者申请堆内存
- SeqList_t *Manager=(SeqList_t*)calloc(1,sizeof(Manager));
- //判断是否申请成功
- if(NULL==Manager)
- {
- perror("calloc for Manager memory is failed!");
- exit(-1);//异常退出
- }
- //2.为所有元素申请堆内存
- Manager->Addr=(DataType_t*)calloc(size,sizeof(DataType_t));
- if(NULL==Manager->Addr)
- {
- perror("calloc for Manager->Addr is failed!");
- free(Manager);
- exit(-1);//异常退出
- }
-
- //3.对顺序表进行初始化
- Manager->Size=size;
- Manager->Last=-1;
- return Manager;
- }
- //判断顺序表是否已经满了
- bool SeqList_IsFull(SeqList_t *Manager)
- {
- return Manager->Size==Manager->Last+1?true:false;
- }
- //向顺序表中添加元素 头插法
- bool SeqList_HeadAdd(SeqList_t *Manager,DataType_t data)
- {
- //判断顺序表是否已经满了
- if(SeqList_IsFull(Manager))
- {
- printf("Sequence is Full!!!");
- return false;
- }
- //顺序表没满,采用头插法插入数据
- for(int i=Manager->Last; i>=0;i--)
- {
- Manager->Addr[i+1]=Manager->Addr[i];
- }
- Manager->Addr[0]=data;
- Manager->Last++;
- return true;
- }
- //向顺序表中添加元素 尾插法
- bool SeqList_TailAdd(SeqList_t *Manager,DataType_t data)
- {
- //判断顺序表是否已经满了
- if(SeqList_IsFull(Manager))
- {
- printf("Sequence is Full!!!");
- return false;
- }
- //顺序表没满,采用尾插法插入数据
- Manager->Addr[Manager->Last+1]=data;
- Manager->Last++;
- return true;
- }
- //判断顺序表是否为空
- bool SeqList_IsEmpty(SeqList_t *Manager)
- {
- return (-1==Manager->Last)?true:false;
- }
- //删除指定数组下标的元素
- bool SeqList_DelTar(SeqList_t *Manager,int Temp)
- {
- //判断顺序表是否为空
- if(SeqList_IsEmpty(Manager))
- {
- printf("SeqList is Empty!!!");
- return false;
- }
- //不为空,继续删除
- if(Temp<=-1||Temp>Manager->Last)
- {
- printf("not find!!!");
- return false;
- }
- for(int i=Temp;i<Manager->Last;i++)
- {
- Manager->Addr[i]=Manager->Addr[i+1];
- }
- Manager->Last--;
- return true;
- }
- //删除顺序表指定数值的元素
- bool SeqList_DelData(SeqList_t* Manager,DataType_t DestVal)
- {
- int temp=-1;//记录元素的数组下标
- //判断顺序表是否为空
- if(SeqList_IsEmpty(Manager))
- {
- printf("SeqList is Empty!!!");
- return false;
- }
- //判断数值是否在顺序表内
- for(int i=0;i<Manager->Last;i++)
- {
- if(Manager->Addr[i]==DestVal)
- {
- temp=i;
- break;
- }
- }
- //如果temp=-1;顺序表中并没有该元素,退出函数
- if(-1==temp)
- {
- printf("destval [%d] is not found\n",DestVal);
- return false;
- }
- SeqList_DelTar(Manager,temp);
- return true;
- }
- //遍历顺序表中的元素
- void SeqList_Print(SeqList_t *Manager)
- {
- for(int i=0; i<=Manager->Last;i++)
- {
- printf("Addr[%d]=%d\n",i,Manager->Addr[i]);
- }
- }
- //
- int main(){
- //1.创建顺序表
- SeqList_t * Manager = SeqList_Creat(10);
-
- //2.向顺序表中的尾部插入新元素
- SeqList_TailAdd(Manager,5);
- SeqList_TailAdd(Manager,6);
- //3.遍历顺序表
- SeqList_Print(Manager); // -- 5
- printf("\n");
- //4.向顺序表中的头部插入新元素
- SeqList_HeadAdd(Manager,9);
- //5.遍历顺序表
- SeqList_Print(Manager); // --9 5 6
- printf("\n");
- //6.删除顺序表的元素
- SeqList_DelData(Manager,5);
- //7.遍历顺序表
- SeqList_Print(Manager); // --9
- printf("\n");
- return 0;
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |