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

头文件: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;
}

运行结果:

相关推荐
闪电麦坤952 小时前
数据结构:递归的种类(Types of Recursion)
数据结构·算法
小熊猫写算法er3 小时前
终极数据结构详解:从理论到实践
数据结构
-qOVOp-4 小时前
408第一季 - 数据结构 - 栈与队列的应用
数据结构
鑫鑫向栄4 小时前
[蓝桥杯]修改数组
数据结构·c++·算法·蓝桥杯·动态规划
鑫鑫向栄4 小时前
[蓝桥杯]带分数
数据结构·c++·算法·职场和发展·蓝桥杯
sss191s5 小时前
Java 集合面试题从数据结构到 HashMap 源码剖析详解及常见考点梳理
java·开发语言·数据结构
鑫鑫向栄7 小时前
[蓝桥杯]堆的计数
数据结构·c++·算法·蓝桥杯·动态规划
weixin_4196583110 小时前
数据结构之LinkedList
数据结构
无敌的小笼包15 小时前
第四讲:类和对象(下)
数据结构·c++
鑫鑫向栄16 小时前
[蓝桥杯]解谜游戏
数据结构·c++·算法·职场和发展·蓝桥杯