静态顺序表
发布日期:2021-09-19 03:18:15 浏览次数:1 分类:技术文章

本文共 5340 字,大约阅读时间需要 17 分钟。

顺序表是指用一段地址连续的存储单元依次存储数据元素的线性结构,在计算机中以数组的形式保存。

顺序表有静态存储和动态存储俩种方式。

//顺序表的静态存储

SeqList.h

#ifndef __SEQLIPST_H__#define __SEQLIPST_H__#include
#include
#include
#include
#pragma warning(disable:4996)#define MAX_SIZE 100typedef int DataType;typedef struct SeqList //顺序表{ DataType array[MAX_SIZE]; size_t size;}SeqList,*pSeqLipst;void InitSeqList(pSeqLipst seq);//初始顺序表void DestorySeqList(pSeqLipst seq);//销毁顺序表void PushBack(pSeqLipst seq, DataType x);void PopBack(pSeqLipst seq);void PushFront(pSeqLipst seq, DataType x);void PopFront(pSeqLipst seq);void Insert(pSeqLipst seq, size_t pos, DataType x);//指定位置插入int Find(pSeqLipst seq, DataType x);//寻找void Erase(pSeqLipst seq, size_t pos);//删除指定位置void Remove(pSeqLipst seq, DataType x);//删除xvoid RemoveAll(pSeqLipst seq, DataType x);//删除所有xvoid BuffleSort(pSeqLipst seq);//冒泡int BinarySearch(pSeqLipst seq, DataType x);//二分查找int BinarySearchD(pSeqLipst seq, size_t begin, size_t end, DataType x); // 二分查找 递归void PrintSeqList(pSeqLipst seq);//输出顺序表#endif __SEQLIPST_H__
函数实现

SeqList.c

#include"SeqList.h"#pragma warning(disable:4996)void PrintSeqList(pSeqLipst seq)//输出顺序表{	assert(seq);	for (size_t i = 0; i < (seq->size); i++)	{		printf("%d",seq->array[i]);	}	printf("\n");}void InitSeqList(pSeqLipst seq)//初始顺序表{	assert(seq);	memset(seq->array, 0, sizeof(DataType)*(MAX_SIZE));	seq->size = 0;}void DestorySeqList(pSeqLipst seq)//销毁顺序表{	assert(seq);	seq->size = 0;}void PushBack(pSeqLipst seq, DataType x){	assert(seq);	if (seq->size >= MAX_SIZE)	{		printf("The SeqList is full\n");		return;	}	seq->array[seq->size] = x;	seq->size++;}void PopBack(pSeqLipst seq){	assert(seq);	if (seq->size <= 0)	{		printf("The Seqlist is empty");		return ;	}	seq->size--;}void PushFront(pSeqLipst seq, DataType x){	assert(seq);	if (seq->size >= MAX_SIZE)	{		printf("The SeqList is full\n");		return;	}	int end = seq->size;	while (end)	{		seq->array[end] = seq->array[end - 1];		--end;	}	seq->size++;	seq->array[0] = x;}void PopFront(pSeqLipst seq){	assert(seq);	if (seq->size <= 0)	{		printf("The Seqlist is empty");		return;	}	for (size_t i = 0; i < seq->size - 1; i++)	{		seq->array[i] = seq->array[i + 1];	}	seq->size--;}void Insert(pSeqLipst seq, size_t pos, DataType x)//指定位置插入{	assert(seq);	assert(pos>0);	assert(pos <= seq->size);	if (seq->size >= MAX_SIZE)	{		printf("The SeqList is full\n");		return;	}	size_t end = seq->size;	while (end >= pos)	{		seq->array[end] = seq->array[end - 1];		--end;                                        	}	seq->size++;	seq->array[pos-1] = x;}int Find(pSeqLipst seq, DataType x)//寻找{	assert(seq);	for (size_t i = 0; i < seq->size; i++)	{		if (seq->array[i] == x)		{			printf("找到了\n");			return i + 1;                                       		}	}	printf("没找到");	return -1;}void Erase(pSeqLipst seq, size_t pos){	assert(seq);	assert(pos>0);	assert(pos <= seq->size);	if (seq->size <= 0)	{	printf("The Seqlist is empty");	return;	}	for (size_t i = pos; i < seq->size - 1; i++)	{	   seq->array[i] = seq->array[i+1];	}	seq->size--;}void Remove(pSeqLipst seq, DataType x)//删除x{	assert(seq);	if (seq->size <= 0)	{		printf("The Seqlist is empty");		return;	}	for (size_t i = 0; i < seq->size; i++)	{		if (seq->array[i] == x)		{			for (size_t j = i; j < seq->size; j++)			{				seq->array[j] = seq->array[j + 1];			}		}	}	seq->size--;}void RemoveAll(pSeqLipst seq, DataType x)//删除所有x     {	assert(seq);	if (seq->size <= 0)	{		printf("The Seqlist is empty");		return;	}	int i = 0;	size_t j = 0;	int count = 0;	for (i = 0; j <= seq->size - 1; i++)	{		if (seq->array[i] == x)		{			count++;		}		else		{			seq->array[j] = seq->array[i];			j++;		}	}	seq->size -= count;}void BuffleSort(pSeqLipst seq)//冒泡{	assert(seq);	if (seq->size <= 0)	{		printf("The Seqlist is empty");		return;	}	for (size_t i = 0; i < seq->size - 1; i++)	{		for (size_t j = 0; j 
size-1-i; j++) { if (seq->array[j] > seq->array[j + 1]) { int tmp = seq->array[j]; seq->array[j] = seq->array[j + 1]; seq->array[j + 1] = tmp; } } }}int BinarySearch(pSeqLipst seq, DataType x)//二分查找{ assert(seq); if (seq->size <= 0) { printf("The Seqlist is empty"); return -1; } int begin = 0; int end = seq->size - 1; while (begin <= end) { int mid = begin + (end - begin) / 2; if (x > seq->array[mid]) { begin = mid + 1; } else if (x < seq->array[mid]) { end = mid - 1; } else { return mid + 1; } //????????????????? } return -1;}int BinarySearchD(pSeqLipst seq, size_t begin, size_t end, DataType x)//二分查找 递归{ assert(seq); if (seq->size <= 0) { printf("The Seqlist is empty"); return -1; } int mid = begin + (end - begin) / 2; if (seq->array[mid] == x) { return mid + 1; } else if (x < seq->array[mid]) { return BinarySearchD(seq, begin, mid - 1, x); } else if (x>seq->array[mid]) { return BinarySearchD(seq, mid + 1, end, x); } else return -1;}

测试部分

text.c

#include"SeqList.h"#pragma warning(disable:4996)int main(){	SeqList seq;	InitSeqList(&seq);	PushBack(&seq, 1);	PushBack(&seq, 2);	PushBack(&seq, 3);	PrintSeqList(&seq);	PopBack(&seq);	PrintSeqList(&seq);	PushFront(&seq, 3);	PushFront(&seq, 4);	PrintSeqList(&seq);	PopFront(&seq);	PrintSeqList(&seq);	//Remove(&seq, 3);	//RemoveAll(&seq, 3);	//PrintSeqList(&seq);	BuffleSort(&seq);	PrintSeqList(&seq);	Erase(&seq, 1);	PrintSeqList(&seq);	system("pause\n");	return 0;}

转载地址:https://blog.csdn.net/audience_fzn/article/details/76781280 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:动态顺序表
下一篇:c语言 不允许创建临时变量,交换俩个数的内容(3种方法)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月09日 14时53分17秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

windows 技术篇-将本地主机加入域的方法实例演示 2021-06-30
Python 图像处理篇-利用opencv库展示本地图片实例演示 2021-06-30
Python 图像处理篇-利用opencv库和numpy库读取包含中文路径下的本地图片实例演示 2021-06-30
oracle 数据回滚,恢复误删的数据,闪回表功能的使用 2021-06-30
mac 系统新功能体验-根据时间变化的动态桌面背景,看壁纸演绎风景大片中的日出与日落 2021-06-30
ADB的安装和使用教程,小米手机连接adb实例演示 2021-06-30
windows 关闭粘滞键-解决Microsoft Remote Desktop输入自动变为快捷键问题 2021-06-30
测试工具 - Postman接口测试入门使用手册,Postman如何进行数据关联、自动更新cookies、简单编程 2021-06-30
PyQt5 技术篇-调用字体对话框(QFontDialog)获取字体,控件设置字体。 2021-06-30
Python 技术篇-将python项目打包成exe独立运行程序,pyinstaller库打包python代码实例演示 2019-04-27
Geany 权限问题:"Error opening file ... : permission denied.",原因及解决办法。 2019-04-27
CSDN博客主页增加赞赏码收钱模块,高端大气上档次! 2019-04-27
PyQt5 技术篇-调用文件对话框获取文件、文件夹路径。文件对话框返回选中的多个文件路径 2019-04-27
SSM 整合实现 增删改查、PageHelper 实现分页 2019-04-27
[增删改查] Lucene 5 索引 CRUD 2019-04-27
使用 SpringBoot 写增删改查接口 2019-04-27
初步使用 JFreeChart 生成报表与感受 2019-04-27
前端使用 BootStrap 写一些后台常用的界面 2019-04-27
使用 SpringBoot + Ckeditor 富文本编辑器、图片上传 2019-04-27
全栈式使用 SpringBoot + SpringSecurity 做登录认证 2019-04-27