当前位置: 首页 > news >正文

数据结构实现顺序表的尾插,尾删,按值查找/修改/删除,按下标查找/增加/删除

头文件:head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 20

enum num {success,false=-1};

typedef int datatype;

typedef struct
{
	int len;
	datatype data[MAXSIZE];
}Sqlist;

Sqlist* create_sqlist();

int insert(Sqlist* list,datatype element);

void show(Sqlist *list);

int tail_delete(Sqlist *list);

int add_insert(Sqlist *list,int sub,datatype element);

int delete_insert(Sqlist *list,int sub);

int change_list(Sqlist *list,int sub,datatype element);

void find(Sqlist *list,int sub);

int find_data(Sqlist* list,datatype element);

void delete_data(Sqlist* list,datatype element);

void change_data(Sqlist* list,datatype element);
void del_double(Sqlist* list);
void swap(Sqlist* list);
void choice_swap(Sqlist* list);
#endif

测试文件:test.c

#include"head.h"

//创建顺序表
Sqlist * create_sqlist()
{
	Sqlist *list = (Sqlist*)malloc(sizeof(Sqlist));
	if(NULL == list)
	{
		printf("创建失败!");
		return NULL;
	}
	list->len=0;
	memset(list->data,0,sizeof(list->data));
		return list;
}

//尾插
int insert(Sqlist* list,datatype element)
{
	if(NULL ==list||list->len==MAXSIZE)
	{
		printf("插入失败");
		return false;
	}
	list->data[list->len]=element;
	list->len++;
	return success;
}

//展示顺序表
void show(Sqlist *list)
{
	if(NULL==list ||list->len==0)
	{
		printf("false");
		return ;
	}
	for(int i=0;i<list->len;i++)
	{
		printf("%d\t",list->data[i]);
	}
	putchar(10);
}

//尾删
int tail_delete(Sqlist *list)
{
	if(NULL==list||list->len==0)
	{
		printf("删除失败");
		return false;
	}
	list->data[list->len-1]=0;
	list->len--;
	return success;
}

//给定下标插入数据
int add_insert(Sqlist *list,int sub,datatype element)
{
	if(NULL==list||list->len==MAXSIZE||sub<0||sub>list->len)
	{
		printf("插入失败\n");
		return false;
	}
	for(int i=list->len-1;i>=sub;i--)
	{
		list->data[i+1]=list->data[i];
	}
	list->data[sub]=element;
	list->len++;
	return success;
}

//给定下标删除数据
int delete_insert(Sqlist *list,int sub)
{
	if(NULL==list||sub<0||sub>=list->len||list->len==0)
	{
		printf("删除失败\n");
		return false;
	}
	for(int i=sub+1;i<list->len;i++)
	{
		list->data[i-1]=list->data[i];
	}
	list->len--;
	return success;
}

//给定下标修改数据
int change_list(Sqlist *list,int sub,datatype element)
{
	if(NULL==list ||sub<0||sub>=list->len||list->len==0)
	{
		printf("修改失败\n");
		return false;
	}
	list->data[sub]=element;
	return success;
}

//给定下标查找数据
void find(Sqlist *list,int sub)
{
	if(NULL==list ||sub<0||sub>=list->len||list->len==0)
	{
		printf("查找失败\n");
		return ;
	}
	printf("%d\n",list->data[sub]);
}

//按元素元素查找
int find_data(Sqlist* list,datatype element)
{
	if(NULL==list||list->len==0)
	{
		printf("查找失败\n");
		return false;
	}
	for(int i=0;i<list->len;i++)
	{
		if(list->data[i]==element)
		{
			return i;
		}
	}
}

//按元素删除
void delete_data(Sqlist* list,datatype element)
{
	int j=find_data(list,element);
	delete_insert(list,j);
}

//按元素修改
void change_data(Sqlist* list,datatype element)
{
	int j=find_data(list,element);
	printf("请输入修改的数据:");
	int data;
	scanf("%d",&data);
	change_list(list,j,data);
}

//去重
void del_double(Sqlist* list)
{
	if(NULL==list||list->len==0||list->len==1)
	{
		printf("去重失败\n");
		return;
	}
	for(int i=0;i<list->len;i++)
	{
		for(int j=i+1;j<list->len;j++)
		{
			if(list->data[i]==list->data[j])
			{
				delete_insert(list,j);
				j--;
			}
		}
	}
}

//冒泡排序
void swap(Sqlist* list)
{
	int t;
	if(NULL==list||list->len==0)
	{
		printf("排序失败\n");
		return;
	}
	for(int i=0;i<list->len-1;i++)
	{
		for(int j=0;j<list->len-1-i;j++)
		{
			if(list->data[j]<list->data[j+1])
			t=list->data[j];
			list->data[j]=list->data[j+1];
			list->data[j+1]=t;
		}
	}
}

//选择排序
void choice_swap(Sqlist* list)
{
	int t;
	int i;
	int min_index;
	if(NULL==list||list->len==0)
	{
		printf("排序失败\n");
		return;
	}
	for(i=1;i<list->len;i++)
	{
		min_index=i-1;
		for(int j=i;j<list->len;j++)
		{
			if(list->data[min_index]>list->data[j])
			{
				min_index=j;
			}
		}
		if(min_index!=i-1)
		{
			t=list->data[min_index];
			list->data[min_index]=list->data[i-1];
			list->data[i-1]=t;
		}
	}
}

主文件:main.c

#include"head.h"

int main(int argc, const char *argv[])
{
	Sqlist* list=create_sqlist();

	int n;
	datatype element;

	printf("请输入插入几个数:");
	scanf("%d",&n);

	for(int i=0;i<n;i++)
	{
		scanf("%d",&element);
		insert(list,element);
	}
	show(list);
	tail_delete(list);
	show(list);

	int sub;

	printf("请输入添加数据的下标:");
	scanf("%d",&sub);
	printf("请输入添加的数据:");
	scanf("%d",&element);
	add_insert(list,sub,element);
	show(list);

	printf("请输入删除的下标:");
	scanf("%d",&sub);
	delete_insert(list,sub);
	show(list);
	
	printf("请输入修改的下标:");
	scanf("%d",&sub);
	printf("请输入修改的数据:");
	scanf("%d",&element);
	change_list(list,sub,element);
	show(list);

	printf("请输入查找的下标:");
	scanf("%d",&sub);
	find(list,sub);

//按值查找
	printf("请输入要查找的值:");
	scanf("%d",&element);
	int j=find_data(list,element);
	printf("要查找的值的下标为:%d\n",j);

//按值删除
	printf("请输入要删除的值:");
	scanf("%d",&element);
	delete_data(list,element);
	show(list);

//按值修改	
	printf("请输入要修改的值:");
	scanf("%d",&element);
	change_data(list,element);
	show(list);

//去重
	del_double(list);
	printf("去重后的数据为:");
	show(list);

//冒泡排序
	swap(list);
	printf("降序后的结果为:");
	show(list);

//选择排序
	choice_swap(list);
	printf("升序后的结果为:");
	show(list);
	return 0;
}

运行结果:

相关文章:

  • python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第四节】
  • Java面试第二山!《计算机网络》!
  • VMware Fusion关机Ubuntu虚拟机黑屏解决方法
  • 使用DeepSeek建立一个智能聊天机器人0.12
  • 【玩转全栈】----Django基本配置和介绍
  • sql语言语法的学习
  • 深入理解 MQTT 协议:物联网通信的核心
  • VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant
  • 常用查找算法整理(顺序查找、二分查找、插值查找、斐波那契查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
  • 国产编辑器EverEdit - 如虎添翼的功能:快速选择
  • pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网
  • Qt——连接MySQL数据库之编译数据库驱动的方法详细总结(各版本大同小异,看这一篇就够了)
  • CentOS系统docker配置镜像加速registry-mirrors,配置阿里云和道客
  • IDEA通过Contince接入Deepseek
  • QT 互斥锁
  • 初识React
  • 2025年 Java 技术的新趋势
  • FreeRTOS第3篇:链表的“精密齿轮”——列表与列表项
  • ubuntu桌面东西没了,右键只有更换壁纸,显示设置和设置
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗
  • 甘怀真:天下是神域,不是全世界
  • 上海市政府党组会议传达学习习近平总书记重要讲话精神,部署抓好学习贯彻落实
  • 媒体:西安62岁男子当街殴打妻子,警方称打人者已被行拘
  • 虚构医药服务项目、协助冒名就医等,北京4家医疗机构被处罚
  • 新质观察|“模速空间”如何成为“模范空间”