ListSet_无序表搜索

无序表搜索就是一个个的遍历, 从头开始逐个检查, 直到表中关键字值等于给定关键字值, 则查找成功. 或者查完整个表, 查找失败为止.

搜索失败的平均搜索长度:(n + 1) / 2.

实现代码:

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "assert.h"
using namespace std;

enum ResultCode
{
    Underflow, Overflow, Success, Duplicate, NotPresent
};
template <class T>
class DynamicSet
{
public:
	virtual ResultCode Search(T &x) const = 0; // 表中搜索与x关键字相同的元素, 若存在则赋值给x并且返回Success, 否则返回NotPresent
	virtual ResultCode Insert(T &x) = 0; // 表中搜索与x关键字相同的元素, 若存在该元素, 赋值给x返回Duplicate, 若表已满返回Overflow, 若表未满返回Success
	virtual ResultCode Remove(T &x) = 0; // 表中搜索与x关键字相同的元素, 若存在该元素, 赋值给x返回Success, 否则返回NotPresent
	virtual bool IsEmpty() const = 0; // 集合为空返回true
	virtual bool IsFull() const = 0; // 集合为满返回true
	/* data */
};

template <class T>
class ListSet: public DynamicSet<T>
{
public:
	ListSet( int mSize );
	~ListSet() { delete []l; }
	bool IsEmpty() const { return n == 0; }
	bool IsFull() const { return n == maxSize; }
	ResultCode Search(T &x) const;
	ResultCode Insert(T &x);
	ResultCode Remove(T &x);
	void Print();
private:
	T *l;
	int maxSize, n;
	/* data */
};

template <class T>
void ListSet<T>::Print()
{
	for(int i = 0; i < n; ++i)
		cout << l[i] << "\t";
	cout << endl;
}

template <class T>
ListSet<T>::ListSet(int mSize)
{
	maxSize = mSize;
	l = new T[maxSize];
	n = 0;
}

template <class T>
ResultCode ListSet<T>::Insert(T &x)
{
	assert(!IsFull());
	l[n++] = x;
	return Success;
}

template <class T>
ResultCode ListSet<T>::Remove(T &x)
{

}

template <class T>
ResultCode ListSet<T>::Search(T &x) const
{
	for(int i = 0; i < n; ++i)
		if(l[i] == x) {
			x = l[i];
			return Success;
		}
	return NotPresent;
}
int main(int argc, char const *argv[])
{
	ListSet<int> ls(20);
	int x = 34; ls.Insert(x);
	x = 88; ls.Insert(x);
	x = 77; ls.Insert(x);
	x = 55; ls.Insert(x);
	x = 44; ls.Insert(x);
	x = 100; ls.Insert(x);
	ls.Print();
	x = 88;
	if(ls.Search(x) == Success)
		cout << "Found " << x << endl;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 09:40:47

ListSet_无序表搜索的相关文章

HTML_ul无序表

本文出自:http://blog.csdn.net/svitter 无序表的应用嵌套 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

ListSet_对半搜索的递归算法

对半搜索是一种二分搜索, 将表划分为长度几乎相等的两个子表. 共有函数Search()调用私有函数BSearch(). 而后递归调用BSearch()函数实现对有序表的对半搜索. mid, left, right均为元素下标, 如果当前表不为空, 则令x与l[mid]比较. 若两者相等, 则搜索成功. 若前者小于后者, 则继续查找左半部分, 否 则查找右半部分. 下标范围分别为[left, mid - 1], [mid + 1, right]. 如果当前搜索表为空表, 搜索失败返回NotPres

ListSet_对半搜索的迭代算法

递归函数效率低, 常使用相应的迭代算法. mid, left, right均为元素下标, 如果当前表不为空, 则令x与l[mid]比较. 若两者相等, 则搜索成功. 若前者小于后者, 则继续查找左半部分, 否 则查找右半部分. 下标范围分别为[left, mid - 1], [mid + 1, right]. 如果当前搜索表为空表, 搜索失败返回NotPresent. 实现代码: #include "iostream" #include "cstdio" #incl

一个无序表单形成的类似于导航条的插件

//样式.sfbMaqtitle{width:960px;height:36px;background:#ff8500;padding:7px 0;font-size:18px;overflow:hidden;}.sfbMaqtitle li{cursor:pointer;display:inline-block;float:left;width:150px;line-height:36px;margin:0 43px;*margin:0 43px!important;*margin:0 40p

Codeforces 542D Superhero&#39;s Job 数论 哈希表 搜索

原文链接https://www.cnblogs.com/zhouzhendong/p/CF542D.html 题目传送门 - CF542D 题目传送门 - 51Nod1477 题意 定义公式 $J(x) = \sum_{1 \leq k \leq x 且 k|x 且 \gcd (k,x/k) = 1} k$ . 现在给定一个整数 $A$ ,要求有多少正整数 $x$ ,满足 $J(x)=A$ . $x|n$ 表示 $x$ 是 $n$ 的因子. $\gcd(a,b) 表示 $a$ 和 $b$ 的最大

Yii CGridView 关联表搜索排序实例

在这篇文章中,我准备讲解如何在CGridView中搜索或者排序关联表中的某一行,通过给Yii Blog demo添加一个list页面. 首先,检查你的blog demo里的protected\models\Comment.php,确保Comment模型有一个search的方法,如果没有,就用gii生成一个,我下载到的blog demo里倒是没有. 然后,写代码的时间到了,我们从 CommentController 开始,我们给它加一个 actionList: 1 2 3 4 5 6 7 8 9

GridView联表搜索,排序

kartik-v/yii2-grid 文档http://demos.krajee.com/grid 在win7下 composer require kartik-v/yii2-grid "@dev" 在vender下多了kartik-v,kartik-v下yii2-export,yii2-grid,yii2-krajee-base,yii2-mpdf 还修改了,vendor\yiisoft\extensions.php 'kartik-v/yii2-krajee-base' =>

SQL Server多表搜索字符串

我们前面介绍了一些关于SQL Server 的很多文章,今天我们主要介绍一下SQL Server下在不知道表名的情况下进行搜索字符串,我们都知道,在一个数据库下会有多张表单的时候,我们所要查找的内容不知道在哪个表单中,那怎么办呢?今天我们就通过编写SQL 语句来解决这个问题: 我们DB4数据库下测试创建了两张表,分别插入了一些数据:具体见下表: 我们测试在两张表中都插入了一条相同的数据,在uname字段中搜索zs这个字符串: 我们编写的SQL 语句: declare @string varcha

swust oj 191--迷宫逃离(打表搜索)

题目链接:http://acm.swust.edu.cn/problem/191/ Time limit(ms): 1000 Memory limit(kb): 65535 江鸟突然想到了一个迷宫逃离的游戏,话说有三个人被困于一个n*m的迷宫里,他们三人都可以向上.向下.向左.向右四个方向进行走动,当然他们所在的初始位置没有障碍物,同时只能走到没有障碍物的格子上,现在江鸟要问你最少需要去掉多少个格子的障碍物,可以使他们三人之间两两互相可达. Description 输入包括多组测试数据,每组测试