静态顺序表常见各个接口的实现

原创 2016年05月30日 10:46:40

顺序表是线性表的一种,除了顺序表线性表还包括链表,今天先讨论顺序表,其中顺序表包括静态的和动态的,现在可以将顺序表的各个接口分别实现

#include"Sql_s.h"
#include<stdio.h>
void test1()//初始化
{
	SqlList mylist;
	Init(&mylist);
}
void test2()//打印
{
	SqlList mylist;
	PrintList(&mylist);
}
void test3()//尾插
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist,1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	PushBack(&mylist, 5);
	PrintList(&mylist);
}
void test4()//头插
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	PushFront(&mylist,2);
	PrintList(&mylist);
}
void test5()//尾删
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	PopBack(&mylist);
	PrintList(&mylist);
}
void test6()//头删
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	PopFront(&mylist);
	PrintList(&mylist);
}
void test7()//插入
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	InsertList(&mylist, 1, 2);
	PrintList(&mylist);
}
void test8()//删除
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	RemoveList(&mylist, 3);
	PrintList(&mylist);
}
void test9()//全部删除
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 4);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 4);
	RemoveListAll(&mylist, 4);
	PrintList(&mylist);

}
void test10()//排序
{
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 4);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 2);
	SortList(&mylist);
	PrintList(&mylist);

}
void test11()//二分查找
{
	DataType ret;
	SqlList mylist;
	Init(&mylist);
	PushBack(&mylist, 4);
	PushBack(&mylist, 1);
	PushBack(&mylist, 3);
	PushBack(&mylist, 2);
	SortList(&mylist);
	ret=BinarySearch(&mylist,3);
	printf("%d\n",ret);
}
int main()
{
	test11();
	system("pause");
	return 0;
}



#ifndef __SQL_S_H__
#include<stdio.h>
#define MAX 20
typedef int DataType;
typedef struct SqlList
{
	DataType arr[MAX];
	int size;
}SqlList;
void Init(SqlList *pmylist);
void PrintList(SqlList mylist);
void PushBack(SqlList *pmylist,int x);
void PushFront(SqlList *pmylist, int x);
void PopBack(SqlList *pmylist);
void PopFront(SqlList *pmylist);
void InsertList(SqlList *pmylist,int pos,DataType x);
void RemoveList(SqlList *pmylist, DataType x);
int  FindList(SqlList *pmylist,DataType x);
void RemoveListAll(SqlList *pmylist, DataType x);
void SortList(SqlList *pmylist);
int BinarySearch(SqlList *pmylist,DataType x);
void Init(SqlList *pmylist)//初始化
{
	memset(pmylist->arr, 0, sizeof(pmylist->size));
	pmylist->size = 0;
}
void PrintList(SqlList *pmylist)//打印
{
	int i = 0;
	for (i = 0; i < pmylist->size; i++)
	{
		printf("%d ",pmylist->arr[i]);
	}
	printf("\n");
	printf("over\n");
}

void PushBack(SqlList *pmylist, DataType x)//尾插
{
	if (pmylist->size == MAX)
	{
		printf("顺序表已满\n");
		return;
	}
	else
	{
		pmylist->size++;
		pmylist->arr[pmylist->size - 1] = x;
	}
}
void PushFront(SqlList *pmylist, DataType x)//头插
{
	if (pmylist->size ==MAX)
	{
		printf("顺序表已满\n");
		return;
	}
	else
	{
		int i = pmylist->size;
		for (; i > 0; i--)
		{
			pmylist->arr[i] = pmylist->arr[i - 1];
		}
		pmylist->arr[0] = x;
		pmylist->size++;
	}
}
void PopBack(SqlList *pmylist)//尾删
{
	pmylist->size--;
}
void PopFront(SqlList *pmylist)//头删
{
	int i = 0;
	for (; i < pmylist->size - 1; i++)
	{
		pmylist->arr[i] = pmylist->arr[i + 1];
	}
	pmylist->size--;
}
void InsertList(SqlList *pmylist,int pos,DataType x)//插入
{
	if (pmylist->size == MAX)
	{
		printf("顺序表已满\n");
		return;
	}
	else
	{
		int i = pmylist->size;
		for (; i>pos; i--)
		{
			pmylist->arr[i] = pmylist->arr[i-1];
		}
		pmylist->arr[pos] = x;
		pmylist->size++;
	}
}
int FindList(SqlList *pmylist,DataType x)//查找
{
	int i=0;
	for (; i < pmylist->size; i++)
	{
		if (pmylist->arr[i] == x)
			return i;
	}
	return -1;
}
void RemoveList(SqlList *pmylist, DataType x)//删除
{
	int ret;
	ret = FindList(pmylist,x);
	if (ret == -1)
	{
		printf("顺序表中没有此元素\n");
		return;
	}
	else
	{
		int i = ret;
		for (; i < pmylist->size-1; i++)
		{
			pmylist->arr[i] = pmylist->arr[i + 1];
		}
		pmylist->size--;
	}
}
void RemoveListAll(SqlList *pmylist, DataType x)//全部删除
{
	int ret;
	int i = 0;
	while (i<pmylist->size-1)
	{
		ret = FindList(pmylist, x);
		if (ret != -1)
		{
			RemoveList(pmylist, x);
		}
		i++;
	}
}
void SortList(SqlList *pmylist)//排序
{
	int i = 0;
	int j = 0;
	DataType tmp;
	for (i = 0; i < pmylist->size - 1; i++)
	{
		for (j = 0; j < pmylist->size - i - 1; j++)
		{
			if (pmylist->arr[j]>pmylist->arr[j + 1])
			{
				tmp = pmylist->arr[j];
				pmylist->arr[j] = pmylist->arr[j + 1];
				pmylist->arr[j + 1] = tmp;
			}

		}
	}
}
int BinarySearch(SqlList *pmylist, DataType x)//二分查找
{
	int mid;
	int left = 0;
	int right = pmylist->size - 1;
	while (left < right)
	{
		mid = (left + right) / 2;
		if (pmylist->arr[mid]>x)
		{
			right = mid - 1;
		}
		else if (pmylist->arr[mid] == x)
		{
			return mid;
		}
		else
		{
			left = mid + 1;
		}
	}
}

#endif __SQL_S_H__



本文出自 “anser” 博客,请务必保留此出处http://674353165.blog.51cto.com/10786549/1735698

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

算法学习之查找算法:静态查找表(1)顺序表查找

引言:         查找表一般
  • To_Be_IT_1
  • To_Be_IT_1
  • 2014年09月22日 06:44
  • 1830

【C语言】静态顺序表和动态顺序表的实现

C语言
  • SuLiJuan66
  • SuLiJuan66
  • 2015年06月29日 19:31
  • 1481

C链表(顺序表、静态链表区别)

#include #include #define LIST_INIT_SIZE 1000 //线性表存储空间的初始分配量 #define LISTINCRESEMENT 100 //...
  • dreamzuora
  • dreamzuora
  • 2016年10月05日 09:26
  • 555

C语言——静态顺序表常见操作

不用多说,直接贴代码 list.h 文件#ifndef __LIST_H__ #define __LIST_H__ #include #include #include #define Max_...
  • qq_36782456
  • qq_36782456
  • 2017年05月01日 13:25
  • 263

算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)

查找表(Search table)是由同一类型的数据元素(或记录)构成的集合。关键字(key)是数据元素中某个数据项的值,又称为键值,用它可以表示一个数据元素,也可以标识一个记录的数据项(字段),称之...
  • Simba888888
  • Simba888888
  • 2013年05月03日 20:57
  • 3005

静态表查找--顺序表的查找(有序)--折半查找

静态查找表在查找的过程中不改变表的状态---不插入也不删除,适合不变动或者不经常变动的查找,顺序表可以使有序的也可以是无序的,如果是有序的可以使用折半查找,每查找一次,就把范围缩小一半,如果是无序的就...
  • u011456016
  • u011456016
  • 2015年12月09日 16:04
  • 2450

实验七 静态查找表的查找

一、实验目的 1.掌握顺序查找操作的算法实现。 2.掌握二分查找操作的算法实现及实现该查找的前提。 3.掌握索引查找操作的算法实现。 二、实验内容 1.建立顺序查找表,并在此查找表上实现顺序查找操作。...
  • aaakkk_1996
  • aaakkk_1996
  • 2017年12月23日 21:35
  • 68

4-2 顺序表操作集 (20分)

本题要求实现顺序表的操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( L...
  • qq_34594236
  • qq_34594236
  • 2016年08月03日 21:18
  • 398

查找(一)静态表查找

静态表查找包括:顺序表查找、有序表查找、静态树表查找、索引表查找 具体原理这里不叙述,详见严蔚敏《数据结构》。1、顺序表查找//SequenceTableSearch.c#include #inc...
  • qq_16912257
  • qq_16912257
  • 2015年07月06日 21:47
  • 636

查找算法整理(一)---静态查找表:顺序表查找、折半(判定树)查找、静态查找树

查找在实际应用中也是最为常见的。通常我们要在一个集合中查找某一个数或多个数,这个集合称为查找表。查找表分为静态查找表和动态查找表。 静态查找表:在查找表中查询某个“特定的”元素,查找表的大小不会改变,...
  • x_panda
  • x_panda
  • 2013年11月27日 18:49
  • 1422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:静态顺序表常见各个接口的实现
举报原因:
原因补充:

(最多只允许输入30个字)