C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合
#include<iostream>
#include<string>
#define ml 10
using namespace std;
typedef struct{//定义Data数据项
std::string name;
long num;
}Data;
struct Link{//定义结构体
Data data[ml+];
int length;
}L;
void initLink(Link *p){//初始化,即便有数据可以覆盖写入增加效率
p->length=;
}
int lengthlink(Link *p){//返回节点数
return p->length;
}
int insertlink(Link *p ,int n,Data data){//指定位置插入
if(n<||n>ml-){
return ;
}
for(int i=p->length+;i>=n;i--){
p->data[i+]=p->data[i];
}
p->data[n]=data;
p->length++;
return ;
}
int lastinsertlink(Link *p,Data data){///不指定位置插入使用
if(p->length>=ml){
return ;
}
p->data[++p->length]=data;
return ;
}
int deletelink(Link *p,int n){
if(n<||n>p->length){
return ;
}
for(int i=n;i<=p->length;i++){
p->data[i]=p->data[i+];
}
p->length--;
return ;
}
void sortstring(Link *p,int left,int right){
int l=left;
int r=right; Data f=p->data[(l+r)/];
while(l<r){
while(strcmp(p->data[l].name.c_str(),f.name.c_str())< && l<right){
l++;
}
while(strcmp(p->data[r].name.c_str(),f.name.c_str())> && r>left){
--r;
} if(l<=r){
Data temp;
temp=p->data[l];
p->data[l]=p->data[r];
p->data[r]=temp;
l++;
--r;
}
}
if(l==r){
l++;
}
if(left<r){
sortstring(p,left,l-);
}
if(l<right){
sortstring(p,r+,right);
}
}
void viewLink(Link *p){
for(int i=;i<=p->length;i++){//输出从1开始,避免输出0位置的地址项
cout<<"数据项:第"<<i<<"位置是 "<<p->data[i].name<<" "<<p->data[i].num<<endl;
}
cout<<"节点长度为: "<<p->length<<endl;
}
void main(){
Data data[]={{"a",},{"b",},{"c",}};
Link list;
initLink(&list);
for(int i=;i<;i++){
lastinsertlink(&list,data[i]);//测试追加节点方法插入节点,优点是效率。
}
viewLink(&list);
Data data1={"d",};
insertlink(&list,,data1);///测试指定位置插入节点
viewLink(&list);
Data data2[]={{"e",},{"f",}};///测试插入多个节点
for(int j=;j<;j++){
int t=;
insertlink(&list,t,data2[j]);
t++;
}
viewLink(&list);
sortstring(&list,,);///测试字符串排序
viewLink(&list);
deletelink(&list,);//测试删除指定节点
viewLink(&list);
}
测试通过结构体实现线性表的操作,同时也实现对字符串的排序, 快速排序和shell排序的结合,有效提高排序效率,注意排序时两个哨兵的位置。
C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合的更多相关文章
- php线性表数组实现的删除操作
php线性表数组实现的删除操作 一.总结 1.array_pop(): 函数删除数组中的最后一个元素. 二.代码 代码一: //线性表的删除(数组实现) function delete_array_e ...
- 动态分配的顺序线性表的十五种操作—C语言实现
线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...
- c数据结构 -- 线性表之 复杂的链式存储结构
复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...
- javascript实现数据结构与算法系列:线性表的静态单链表存储结构
有时可借用一维数组来描述线性链表,这就是线性表的静态单链表存储结构. 在静态链表中,数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的相对位置.数组的第0分量可看成头结点,其指 ...
- c语言数据结构之线性表的顺序存储结构
线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...
- JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表
Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...
- 线性表的顺序存储结构——java
线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...
- 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现
应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关 ...
- C++实现线性表的链接存储结构(单链表)
将线性表的抽象数据类型定义在链接存储结构下用C++的类实现,由于线性表的数据元素类型不确定,所以采用模板机制. 头文件linklist.h #pragma once #include <iost ...
随机推荐
- ASP.NET上传断点续传
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections
mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections 第一种处理方式: ./mysql -u root -p 登录成功后执行以下语句查询当前的 ...
- create-react-app创建,ie11不兼容
按照官方文档使用yarn create react-app centre-app 创建工程,使用yarn start, chrome浏览器可正常访问 但在ie11下报如下图错误 解决方案如下: 1. ...
- css实现动态阴影、蚀刻文本、渐变文本
css实现动态阴影 创建与类似的阴影box-shadow 而是基于元素本身的颜色. 代码实现: <div class="dynamic-shadow-parent"> ...
- linux输出与查看的几种方式
输出的几种方式:echo/ tee echo "postgres install Failed !!!!!!" | tee -a "$Install_log"# ...
- MyOD C语言代码实现
Myod C语言实现 一.题目要求 1 复习c文件处理内容 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Ma ...
- 2018092609-2 选题 Scrum立会报告+燃尽图 03
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8680 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...
- docker 安装kafka(快速)
下载镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 启动镜像 docker run -d --name zoo ...
- leetcode-easy-others-461. Hamming Distance
mycode 92.05% class Solution(object): def hammingDistance(self, x, y): """ :type x: ...
- 三步解决IDEA系列开发工具 RubyMine、IntelliJ IDEA 卡顿问题
近日有小伙伴跟我反映说自己的开发工具很卡,有没有什么解决方案?答案是当然有啦!接下来看看怎么设置! 1.打开RubyMine,或IDEA,上边工具栏选择Help,下拉选择Edit Custom VM ...