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

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

运行结果:

相关推荐
阿让啊4 小时前
C语言strtol 函数使用方法
c语言·数据结构·c++·单片机·嵌入式硬件
superlls7 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
Ripple123128 小时前
数据结构:顺序表与链表
数据结构·链表
一个响当当的名号9 小时前
B树,B+树,B*树(无代码)
数据结构·b树
古译汉书11 小时前
嵌入式铁头山羊stm32-ADC实现定时器触发的注入序列的单通道转换-Day26
开发语言·数据结构·stm32·单片机·嵌入式硬件·算法
野犬寒鸦11 小时前
力扣hot100:相交链表与反转链表详细思路讲解(160,206)
java·数据结构·后端·算法·leetcode
GalaxyPokemon11 小时前
LeetCode - 1089. 复写零
数据结构
失散1311 小时前
分布式专题——1.2 Redis7核心数据结构
java·数据结构·redis·分布式·架构
zzzsde12 小时前
【数据结构】强化训练:从基础到入门到进阶(1)
数据结构
奔跑吧 android13 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】
linux·数据结构·input·kernel·input_dev·input_handler·input_handle