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

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

运行结果:

相关推荐
ChoSeitaku38 分钟前
NO.80十六届蓝桥杯备战|数据结构-字符串哈希|兔子与兔子(C++)
数据结构·蓝桥杯·哈希算法
应以大橘为重2 小时前
interrupt子系统中的数据结构
linux·数据结构·驱动开发
houliabc2 小时前
C语言个人笔记
c语言·数据结构·笔记·算法
_x_w4 小时前
【12】数据结构之基于线性表的排序算法
开发语言·数据结构·笔记·python·算法·链表·排序算法
爱编码的傅同学4 小时前
数据结构(五)——AVL树(平衡二叉搜索树)
数据结构·算法
Bonnie_12154 小时前
02-redis-数据结构实现原理
数据结构·redis·算法
折枝寄北4 小时前
数据结构 | 证明链表环结构是否存在
数据结构·链表
LAOLONG-C5 小时前
先占个日常,等会写。
数据结构
_Vinyoo5 小时前
算法——分治
数据结构·算法
Dovis(誓平步青云)6 小时前
【数据结构】排序算法(下篇·终结)·解析数据难点
c语言·数据结构·学习·算法·排序算法·学习方法·推荐算法