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 ...
随机推荐
- jquery focus()方法 语法
jquery focus()方法 语法 作用:当元素获得焦点时,发生 focus 事件.大理石平台价格 触发focus事件语法:$(selector).focus() 将函数绑定到focus事件语法: ...
- 1143, 3997: Dilworth定理的简单应用
偏序集上的最小链覆盖等于最长反链 于是两道题 1143: [CTSC2008]祭祀river 求偏序集上的最长反链 转换成偏序集上的最小链覆盖 求个闭包,转换成最小路径覆盖,二分图匹配一发 #incl ...
- 洛谷P3294 [SCOI2016]背单词——题解
题目传送 阅读理解题题意解释可以看这位大佬的博客. 发现求后缀与倒序求前缀是等价的,而找前缀自然就想到了trie树.将所有字符串翻转后再建入trie树中,再对每一个字符串翻转后从trie树中找前缀,就 ...
- Linux命令-文件管理(四)
Linux命令-文件管理 Linux slocate命令 Linux slocate命令查找文件或目录. slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息. 语法 slocate ...
- Zeller 公式:计算任意一天是星期几
Zeller's Formula: For the Gregorian calendar, Zeller's Formula is \[\displaystyle W=\left(\left\lflo ...
- linux输出与查看的几种方式
输出的几种方式:echo/ tee echo "postgres install Failed !!!!!!" | tee -a "$Install_log"# ...
- C# 查看计算机端口使用状态
using System.Net.NetworkInformation; /// <summary> /// 获取第一个可用的端口号 /// </summary> /// &l ...
- ajaxfrom 和ajaxgird的区别
ajaxfrom 和ajaxgird区别ajaxfrom适合单条数据,主要是用来显示主表的信息<hy:ajaxform2 id="ajaxform" name="d ...
- 12个Sublime Text应用技巧[转载]
本文为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text选择文本的快捷键 ...
- 【3】火狐中: radio被点击以后,重刷页面,不会选择默认的radio
1.问题:火狐中radio (单选框)点击以后,重新刷新页面,不会选择默认的radio 解决:form表单中添加:autocomplete="off" autocomplete 属 ...