IT评测·应用市场-qidao123.com
标题:
次序表的实现
[打印本页]
作者:
滴水恩情
时间:
2025-3-13 21:14
标题:
次序表的实现
次序表的实现
次序表功能
次序表初始化
次序表插入元素
次序表删除元素
次序表查找元素
/*****************************************************
* 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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4