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 ...
随机推荐
- 探讨MySQL的各类锁
参考文档:http://blog.csdn.net/soonfly/article/details/70238902 锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除了传统的计算机 ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 Find Integer
Find Integer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- HDU2433—Travel (BFS,最短路)
Travel Time Limit: 10000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 官网Windows 10安装程序驱动下载--截止:2019.01.06版本
说明:鉴于win7,8不可直接再下载原装iOS文件,这份共享程序包是为以后N年做的准备.如果N年后这个包还可以用,就可以省去很多麻烦. 百度网盘分享:https://pan.baidu.com/s/1 ...
- MySQ彻底删除与安装配置
彻底删除 1.查看 MySQL 安装了哪些东西 rpm -qa |grep -i mysql 2.卸载 -.el7.x86_64 -.el7.x86_64 .noarch -.el7.x86_64 - ...
- Android学习_7/22
一.Android项目目录结构 1. AndroidManifest.xml:整个Android项目的配置,注册各组件 <activity android:name=" ...
- Docker入门-介绍和安装
Docker容器 Docker是什么 Docker最初是dotCloud公司创建人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于 ...
- 数据加密之RSA
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- 2018-2019-2 网络对抗技术 20165232 Exp 9 Web安全基础
2018-2019-2 网络对抗技术 20165232 Exp 9 Web安全基础 实验任务 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF) ...
- leetcode-easy-string-344 Reverse String
mycode class Solution(object): def reverseString(self, s): """ :type s: List[str] :rt ...