#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排序结合的更多相关文章

  1. php线性表数组实现的删除操作

    php线性表数组实现的删除操作 一.总结 1.array_pop(): 函数删除数组中的最后一个元素. 二.代码 代码一: //线性表的删除(数组实现) function delete_array_e ...

  2. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  3. c数据结构 -- 线性表之 复杂的链式存储结构

    复杂的链式存储结构 循环链表 定义:是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环) 优点:从表中任一节点出发均可找到表中其他结点 注意:涉及遍历操作时,终止条件是判断 ...

  4. javascript实现数据结构与算法系列:线性表的静态单链表存储结构

    有时可借用一维数组来描述线性链表,这就是线性表的静态单链表存储结构. 在静态链表中,数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的相对位置.数组的第0分量可看成头结点,其指 ...

  5. c语言数据结构之线性表的顺序存储结构

    线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...

  6. JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

    Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...

  7. 线性表的顺序存储结构——java

    线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...

  8. 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现

    应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有"同属于一个集合"的关系 线性结构:数据元素之间存在一个对一个的关系 树形结构:数据元素之间存在一个对多个关 ...

  9. C++实现线性表的链接存储结构(单链表)

    将线性表的抽象数据类型定义在链接存储结构下用C++的类实现,由于线性表的数据元素类型不确定,所以采用模板机制. 头文件linklist.h #pragma once #include <iost ...

随机推荐

  1. C语言写数据库(三)

    遇到的问题以及解决思路方法 1.外部导入数据库文件 进入mysql,创建数据库sh_robot source /home/exbot/sh_robot.sql 查看数据库编码格式 show varia ...

  2. KMP 串的模式匹配 (25 分)

    给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出.如果找不到,则输出“Not ...

  3. jQuery_插入操作

    jQuery的插入方法有很多,有内部插入,也有外部插入,每个插入方式里面还有很多种,本文一一介绍,注释在代码里,直接上代码: 代码: <!DOCTYPE html> <html> ...

  4. [CSP-S模拟测试]:城市游戏(图论+DP)

    题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...

  5. IDEA基础配置

    详细IDEA使用请参考 https://www.w3cschool.cn/intellij_idea_doc/ 下面的内容都是从别人手中收集之后整理的: 全局设置 修改主题 修改字体 修改控制台字体 ...

  6. MySort(选做)的实现

    MySort(选做)的实现 题目内容 注意:研究sort的其他功能,要能改的动代码,需要答辩 模拟实现Linux下Sort -t : -k 2的功能. 要有伪代码,产品代码,测试代码(注意测试用例的设 ...

  7. 数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看

    简介 大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才 ...

  8. axios的数据请求方式及跨域

    express 的三大功能:静态资源.路由.模板引擎 app.use(express.static('www')); 只要是创建这个静态的目录,这个 www 的静态目录里面的文件就可以被访问 数据的请 ...

  9. 转自B站 真希望我在20岁就懂得的10个人生道理 主讲:王魄

    视频地址:https://www.bilibili.com/video/av65194244?from=search&seid=15261178568916939794 这位阿姨讲得还行,特别 ...

  10. 【转】C/C++ 引用作为函数的返回值

    转自:https://blog.csdn.net/weixin_40539125/article/details/81410008 这篇文章写的很好: 语法:类型 &函数名(形参列表){ 函数 ...