论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
顺序表的实现
顺序表的实现
滴水恩情
金牌会员
|
2024-5-19 07:09:15
|
显示全部楼层
|
阅读模式
楼主
主题
903
|
帖子
903
|
积分
2709
/********************************************************************************************************
*
* file name: Zqh_顺序表.c
* author : keyword2024@163.com
* date : 2024/05/05
* function : 顺序表的增删改查
* note : 模板
*
* Copyright (c) 2023-2025 keyword2024@163.com All right Reserved
* ******************************************************************************************************/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//指的是顺序表中的元素的数据类型,用户可以根据需要进行修改
typedef int DataType_t;
//构造记录顺序表SequenceList各项参数(顺序表的首地址 + 顺序表的容量 + 顺序表中最后有效元素的下标)的结构体
typedef struct SequenceList
{
DataType_t * Addr; //记录顺序表首地址
unsigned int Size; //记录顺序表的容量
int Last; //顺序表中最后元素的下标
}SeqList_t;
//创建顺序表并对顺序表进行初始化
SeqList_t * SeqList_Create(unsigned int size)
{
//1.利用calloc为顺序表的管理结构体申请一块堆内存
SeqList_t *Manager = (SeqList_t*)calloc(1,sizeof(Manager));
//calloc的返回值是是一块内存的首地址
if (NULL==Manager){
perror("calloc memory for Manager is failed");
exit(-1);//程序异常终止
}
//2.利用calloc为所有元素申请堆内存
Manager ->Addr = (DataType_t*)calloc(size,sizeof(DataType_t));
if (NULL == Manager->Addr)
{
perror("calloc memory for element is failed");
free(Manager);
exit(-1);//程序异常终止
}
//3.对管理顺序表的结构体进行初始化(元素容量 + 最后元素下标)
Manager->Size =size; //对顺序表中的容量进行初始化
Manager->Last = -1; //由于顺序表为空,则最后元素下标初值为-1
return Manager;
}
//判断顺序表是否已满
bool SeqList_IsFull(SeqList_t*Manager)
{
return (Manager->Last + 1 == Manager->Size) ? true : false
}
//向顺序表尾部加入元素
bool SeqList_TaiAdd(SeqList_t *Manager,DataType_t Data)
{
//1.判断顺序表是否已满
if (SeqList_IsFull(Manager))
{
printf("SequenceList is Full\n");
return false;
}
//2.如果顺序表有空闲空间,则把新元素添加到顺序表尾部
Manager->Addr[++Manager->Last] = Data;
return true;
}
//向顺序表的头部加入元素
bool SeqList_HeadAdd(SeqList_t*Manager,DataType_t Data)
{
//1.判断顺序表是否已满
if (SeqList_IsFull(Manager))
{
printf("SequenceList is Full\n");
return false;
}
//2.如果顺序表有空闲空间,则需要把顺序表所有元素向后移动1个单位
for(int i = Manager->Last; i>=0 ; i--){
Manager->Addr[i+1] = Manager->Addr[i];
}
//3把新元素添加到顺序表的头部,并且更新管理结构体中的元素下标+1
Manager->Addr[0] = Data;
Manager->Last++;
return true;
}
//判断顺序表是否为空
bool SeqList_IsEmpty(SeqList_t*Manager)
{
return(-1 == Manager->Last) ? true : false;
}
//删除顺序表的元素
bool SeqList_Del(SeqList_t*Manager,DataType_t DestVal)
{
int temp = -1; //记录要删除的元素的下标
//1.判断顺序表是否为空
if (SeqList_IsEmpty(Manager)){
printf("SequenceList is Empty!\n");
return false;
}
//2.此时需要查找目标值是否在顺序表中
for (int i = 0; i <= Manager->Last; ++i){
//如果目标值和顺序表中元素的值相同
if (DestVal == Manager->Addr[i]){
temp = i; //把目标元素的下标备份到变量temp中
break;
}
}
//3.如果顺序表没有目标值的元素则直接终止函数
if (-1 == temp){
printf("destval [%d] is not found\n",DestVal);
return false;
}
//4.如果找到了目标元素,则直接把元素的后继元素向前移动一个单位
for (int i = temp; i < Manager->Last; ++i){
Manager->Addr[i] = Manager->Addr[i+1];
}
//5.由于删除了一个元素,则需要让顺序表的有效元素下标-1
Manager->Last--;
return true;
}
//遍历顺序表的元素
void SeqList_Print(SeqList_t*Manager)
{
for (int i = 0; i <=Manager->Last; ++i){
printf("Element[%d] = %d\n",Manager->Addr[i] );
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
滴水恩情
金牌会员
这个人很懒什么都没写!
楼主热帖
体系集成商重返黄金年代
SFSafariViewController 加载的网页与 ...
ubuntu 20.04 安装好搜狗输入法无法输 ...
未来数据库需要关心的硬核创新 ...
nsenter命令简单介绍
Spark快速上手(2)Spark核心编程-RDD简 ...
【C++】STL——vector模拟实现
Linux 进程概念 (上)
一次服务器被入侵的处理过程分享 ...
Kali Linux全网最细安装教程
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表