从0开始的数据结构的书写-------线性表(顺序表)

devtools/2024/10/11 13:21:18/

(复习考研的休息区,心血来潮,写点代码)

三个规则:

1、不使用c++ stl库进行书写

2、最好基于严蔚敏老师的数据结构

3、最好使用malloc和realloc动态分配内存

(如果有问题,请大家看看)

// 线性表的顺序存储 
// 不使用stl 
#include<iostream>
#include<cstring>using namespace std;#define LIST_INIT_SIZE  100 // 线性表的初始空间
#define LISTINCREMENT 10 // 分配增量 
#define OK true
#define ERROR false 
#define ERRORINT 0x3f3f3f3f3ftypedef struct
{int *elem; // 顺序表的基址 int len; // 当前长度 int listsize; // 当前分配的存储容量
}SqList;bool InitList_Sq(SqList &L)
{// L.elem = new int[LIST_INIT_SIZE];L.elem = (int *)malloc(sizeof(int) * LIST_INIT_SIZE);if(!L.elem) exit(0); // 分配失败 L.len = 0;L.listsize = LIST_INIT_SIZE;return OK;
}bool ClearList(SqList &L)
{if(!L.elem) return ERROR;printf("已被清空\n");if(L.len == 0) return OK;for(int i = 0;i < L.len;i ++)L.elem[i] = 0; // 清零L.len = 0; return OK;
}bool ListEmpty(SqList L)
{if(!L.elem) exit(0);if(L.len == 0) return OK;return ERROR;
}int ListLength(SqList L)
{if(!L.elem) exit(0);return L.len;
}// 注意:线性表编号一定是从1~n 
int GetElem(SqList L , int idx)
{if(idx < 1 || idx > L.len) return ERRORINT;return L.elem[idx - 1];
}/* 
'>'找到第一个大于e的值的位序 
'<'找到第一个小于e的值的位序 
'='找到第一个等于e的值的位序 
*/
int LocateElem(SqList L , int e , char ch)
{if(!L.elem) exit(0);if(ch == '='){for(int i = 0;i < L.len;i ++)if(L.elem[i] == e) return i + 1;}else if(ch == '>'){for(int i = 0;i < L.len;i ++)if(L.elem[i] > e) return i + 1;}else if(ch == '<'){for(int i = 0;i < L.len;i ++)if(L.elem[i] < e) return i + 1;}return 0; // 没有找到 
}bool ListInsert(SqList &L , int idx , int e)
{if(idx < 1 || idx > L.len + 1) return ERROR;if(L.len >= L.listsize) // 增加分配 {cout << "该表重新分配内存\n";L.elem = (int *)realloc(L.elem , sizeof(int) * (L.listsize + LISTINCREMENT));L.listsize += LISTINCREMENT;}for(int i = L.len - 1;i >= idx - 1;i --)L.elem[i + 1] = L.elem[i];printf("插入数据%d\n" , e);	L.elem[idx - 1] = e;L.len ++;return OK;
}int ListDelete(SqList &L , int idx)
{if(idx < 1 || idx > L.len) return ERRORINT;int e = L.elem[idx - 1];printf("删除数据%d\n" , e);for(int i = idx - 1;i < L.len;i ++)L.elem[i] = L.elem[i + 1];L.len --;return e;
}void ListPrint(SqList L)
{if(!L.elem) exit(0);cout << "当前顺序表是:"; for(int i = 0;i < L.len;i ++)cout << L.elem[i] << " ";cout << "\n";return ;
}int main()
{SqList L;InitList_Sq(L);for(int i = 10;i >= 1;i --) // 正向插入数据1~10 ListInsert(L , 1 , i);ListPrint(L);ListDelete(L , 1);ListDelete(L , 3);ListPrint(L);
}


http://www.ppmy.cn/devtools/35009.html

相关文章

【项目部署】手把手带你从零部署项目:宝塔 + uwsgi + Django + 腾讯云 + Websocket

1. 前言 哈喽&#xff0c;大家好&#xff0c;我是jiaoxingk。今天带来的是有关Django项目部署的教程。 当我们完成了一个项目作品之后&#xff0c;我们肯定会迫不及待的就准备上线部署啦&#xff0c; 这篇教程将带你从服务器的配置选购&#xff0c;再通过安装宝塔的形式进行项目…

springboot+websocket开发简单的在线群聊聊天web版本

springbootwebsocket开发简单的在线群聊聊天web版本&#xff01;近期在测试websocket插件的群聊功能。下面是一个简单的demo。分享给大家&#xff0c;亲测可以使用的。 1&#xff1a;首先是一个chat.html页面。代码如下&#xff1a; <!DOCTYPE html> <html lang"…

RK3568 学习笔记 : 精简 u-boot env 默认复杂的多种引导启动设置

前言 环境&#xff1a; 正点原子 Atompi-CA1 RK3568 开发板、正点原子 DLRK3568 开发板&#xff0c;&#xff08;一时脑热买了两块 RK3568 开发板&#xff09;&#xff0c;Atompi-CA1 RK3568 开发板比较小巧&#xff0c;利于一些前期的嵌入式 Linux 开发学习与实践。 RK3568 开…

【考研数学】武忠祥「基础篇」如何衔接进入强化?

如果基础篇已经做完&#xff0c;并且讲义上的例题也都做完了&#xff0c; 那下一步就是该做题了 这个时候&#xff0c;不能盲目做题&#xff0c;做什么题很重要&#xff01;我当初考研之前&#xff0c;基础也很差&#xff0c;所以考研的时候选了错误的题集&#xff0c;做起来就…

Java毕设之学院党员管理系统的设计与实现

运行环境 环境说明: 开发语言:java 框架:springboot&#xff0c;vue JDK版本:JDK1.8 数据库:mysql5.7(推荐5.7&#xff0c;8.0也可以) 数据库工具:Navicat11 开发软件:idea/eclipse(推荐idea) Maven包:Maven3.3.9 系统实现 管理员功能实现 党员管理 管理员进入指定功能操作…

vtk教程:禁止VTK弹出警告窗口warning

在使用VTK&#xff08;Visualization Toolkit&#xff09;进行可视化操作时&#xff0c;有时候会弹出警告窗口&#xff08;warning messages&#xff09;&#xff0c;这些警告可能是由于数据问题或是API使用不当等原因触发的。 如果你希望在使用VTK时禁用这些警告窗口&#xff…

【Unity 组件思想-预制体】

【Unity 组件思想-预制体】 预制体&#xff08;Prefab&#xff09;是Unity中一种特殊的组件 特点和用途&#xff1a; 重用性&#xff1a; 预制体允许开发者创建可重复使用的自定义游戏对象。这意味着你可以创建一个预制体&#xff0c;然后在场景中多次实例化它&#xff0c;…

7-zip下载、安装

7-Zip 官方中文网站 (sparanoid.com) 7-Zip - 程序下载 (sparanoid.com)