#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. rm:删除文件或目录

    在使用 rm 命令删除文件或目录时,系统不会产生任何提示信息.此命令的基本格式为:rm[选项] 文件或目录 选项: -f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直 ...

  2. CF1213E Two Small Strings

    题目链接 问题分析 由于三个字母是等价的,所以大致可以分为如下几种情况: aa, ab ab, ac ab, ba ab, bc 不难发现,第\(3\)中情况可能造成无解(\(n>1\)时),而 ...

  3. Misha and Permutations Summation

    A - Misha and Permutations Summation 首先这个 mod n! 因为数量级上的差别最多只会对康拓展开的第一项起作用所以这个题并不需要把 ord (p) 和 ord ( ...

  4. TCP连接数配置

    一般的设置规则为: 系统最大文件数>可用端口>用户最大文件数 sysctl -a | grep file-max cat /proc/sys/fs/file-max 这表明这台Linux系 ...

  5. python学习之路(21)

    偏函数 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲 ...

  6. wannafly 挑战赛9 D 造一造 (卡特兰数)

    链接:https://www.nowcoder.com/acm/contest/71/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64b ...

  7. 【Spark机器学习速成宝典】模型篇05决策树【Decision Tree】(Python版)

    目录 决策树原理 决策树代码(Spark Python) 决策树原理 详见博文:http://www.cnblogs.com/itmorn/p/7918797.html 返回目录 决策树代码(Spar ...

  8. 评【TED】陆克文:中美注定要冲突吗?

    陆克文TED演讲地址:https://www.bilibili.com/video/av2196100?from=search&seid=6953438337852168205 实话说,这篇材 ...

  9. ERROR:非静态成员引用必须与特定对象相对

    非静态成员引用必须与特定对象相对 引用非静态成员前应该先声明该类的对象 typedef struct _SUPERRESOLUTIONPARAM { int Times; //重建倍数,指的是分别对长 ...

  10. Other | 十招教你找到海量PPT模板

    转载自:https://www.douban.com/note/330962457/ 问:PPT模板是什么含义? 答: 先假定你们要的是这种网上到处泛滥成灾的主题PPT吧,下面请耐心看到最后,秋叶老师 ...