C++ 顺序表
C++ 顺序表
/***
1顺序表
1、必做题
- 编写程序建立一个数续表,并逐个输出顺序表中所有数据元素的值。编写主函数测试结果。
- 编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。
如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);
如果不存在,返回-1。编写主函数测试结果。 - 在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。
解题思路:首先查找插入的位置,再移位,最后进行插入操作;
从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;
然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。 - 删除顺序表中所有等于X的数据元素。
2、选做题
已知两个顺序表A和B按元素值递增有序排列,
要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表
(允许表中含有值相同的元素)。
***/
//在头文件中"SeqList.h"
/**< writer:FDA_orangebook */
/** \brief: 顺序表
*
* int Length(){return length;}
//用于获取长度1-N
* T Get(int i);
//用于获取第I个数据
* T Locate(T value);
//用于获取 值为value的位置
* void Insert(T value);
//在递增的顺序中,插入value值
* void Insert(int position,T value);
//在position这个位置,插入value
* void Insert(T *_data,int _length);
//将_data与data以递减的顺序合并
* T Delete(int position);
//将position这个中的元素删除
* void PrintList();
//打印 data 序列
*/ const int MaxSize=;
#define T int //此处修改 数组的类型
class SeqList
{
public:
//定义两个构造函数
SeqList()
{
length=;
}
SeqList(T a[],int n);
~SeqList() {}
int Length()
{
return length;
}
T Get(int i);
T Locate(T value);
void Insert(T value);
void Insert(int position,T value);
void Insert(T *_data,int _length);
T Delete(int position);
void PrintList();
private:
T data[MaxSize];
int length;
};
//在SwqList.cpp
#ifndef SEQLIST_H_ #define SEQLIST_H_
#include "SeqList.h"
#include<iostream>
#include<algorithm>
using namespace std;
SeqList::SeqList(T *a,int n)
{
if(n>MaxSize) cout<<"Parameters of illegal"<<endl;
for(int i=; i<n; i++)
data[i]=a[i];
length=n;
} void SeqList::Insert(T value)
{
int j;
sort(data,data+length);
cout<<length<<endl;
for(j=length; value<=data[j-]&&j>; --j)
data[j]=data[j-];
data[j]=value;
++length;
cout<<length<<endl;
} void SeqList::Insert(int position,int value)
{
if(length>=MaxSize||position<||position>length+)
cout<<"input error"<<endl;
for(int j=length; j>=position; --j)
data[j]=data[j-];
data[position-]=value;
++length;
}
bool myfunction (int i,int j)
{
return (i>j);
}
void SeqList::Insert(T *_data,int _length)
{
//int j=0;
sort(data,data+length,myfunction);
sort(_data,_data+_length,myfunction);
PrintList();
int i=;int j;
for(; i<_length;++i)
{
for( j=;_data[i]<data[j]&&j<length;++j);
Insert(j+,_data[i]); } } T SeqList::Delete(int position)
{
if(length==||position<||position>length) cout<<"error"<<endl;
else
{
int x=data[position-];
for(int j=position; j<length; j++)
data[j-]=data[j];
length--;
return x;
}
return (T)-;
} T SeqList::Get(int i)
{
if(i<||i>length) cout<<"error"<<endl;;
return data[i-];
} T SeqList::Locate(T value)
{
for(int i=; i<length; i++)
if(data[i]==value) return i+;
return -;
} void SeqList::PrintList()
{
cout<<"\n****************************"<<endl;
for(int i=; i<=length; i++)
i%==?cout<<data[i-]<<"\n":cout<<data[i-]<<"\t";
};
#endif // SwqList_H_
#include"SeqList.h"
#include<iostream>
#include<stdlib.h> using namespace std;
#define MAX 100 int main()
{
T a[]= {,,,,,,,,,};
T bb[]= {,,,,,,};
SeqList test(a,); test.PrintList(); if(test.Locate(a[])!=-)
cout<<test.Locate(a[])<<endl;
test.Insert(-);
test.PrintList(); test.Delete(test.Locate(-));
test.PrintList(); test.Insert(bb,);
test.PrintList();
}
C++ 顺序表的更多相关文章
- jdk顺序表笔记
一.AbstractCollection 提供了集合的最大实现 继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator 二.fail-fast策略 该策略在集合 ...
- c++顺序表基本功能
头文件 #define LIST_MAX_SIZE 5#define LISTINCREMENT 2#include<assert.h>#include<string>temp ...
- 数据结构:顺序表(python版)
顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...
- 《数据结构》2.2顺序表(sequence list)
//顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...
- c数据结构 顺序表和链表 相关操作
编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...
- java顺序表和树的实现
一.顺序表 1.线性表 //java顺序表的实现,如ArrayList就是用线性表实现的,优点是查找快,缺点是添加或删除要移动很多元素,速度慢 public class SequenceList { ...
- 数据结构顺序表删除所有特定元素x
顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...
- 顺序表C语言版
#include <stdio.h> /* * 顺序表最多输入N个数 */ #define N 10 #define OK 1 #define ERROR -1 struct sequeu ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
- C语言 线性表 顺序表结构 实现
一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...
随机推荐
- 【扩展欧几里得】Bzoj 1477:青蛙的约会
Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...
- 团体程序设计天梯赛-练习集L2-011. 玩转二叉树
L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...
- uva 11143
#include<cstdio> #include<cstring> #include<algorithm> #define maxn 5100 #include& ...
- nginx上用fastcgi配置python环境
费了2天的功夫,翻阅了无数的中文.英文资料,终于搞定.写下此文留待以后翻阅用 本文环境,centOS 5.4 ,Nignx-0.8.49, Python 2.6.5 ========== ...
- SSH配置log4j的方法
SSH使用log4j的方便之处 1. 动态的改变记录级别和策略,即修改log4j.properties,不需要重启Web应用,这需要在web.xml中设置一下.2. 把log文件定在 /WEB-INF ...
- Qt串口通信接收数据不完整的解决方法(传输图片)
在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...
- C#基础精华07(委托事件,委托的使用,匿名方法)
1.委托概述 委托是一种数据类型,像类一样(可以声明委托类型变量).方法参数可以是int.string.类类型 void M1(int n){ } √ void M2(string s){ } √ ...
- lib库依赖解决
当前环境之前是装过MySQL官方版本5.6.22,想测试Percona版本MySQL.启动Percona-MySQL报错. [root@dg7 support-files]# /etc/init.d/ ...
- 【HDOJ】3601 Coach Yehr’s punishment
RMQ+dp+二分.最好还是离散化一下再处理,通过dp求得每个位置的上一次出现的位置pre数组,从而求得不重复的长度len.然后RMQ可以预处理区间的最大值,pre是个单调非递减数列.每次查询时,二分 ...
- ORACLE和SQL SERVER的数据同步常用方法
ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...