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

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

运行结果:

相关推荐
qy发大财7 分钟前
分发糖果(力扣135)
数据结构·算法·leetcode
滴_咕噜咕噜37 分钟前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
haaaaaaarry42 分钟前
【分治法】线性时间选择问题
数据结构·算法
CS创新实验室1 小时前
计算机考研之数据结构:P 问题和 NP 问题
数据结构·考研·算法
小王努力学编程3 小时前
【算法与数据结构】单调队列
数据结构·c++·学习·算法·leetcode
万兴丶4 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
程序员东min4 小时前
数据结构:实验题目:单链表归并。将两个非递减次序排列的单链表归并为一个非递增次序排列的单链表,并计算表长。要求利用原来两个单链表的结点存放合并后的单链表。
数据结构
黄雪超5 小时前
深入HBase——核心组件
数据结构·数据库·hbase
夏末秋也凉6 小时前
力扣-贪心-53 最大子数组和
数据结构·算法·leetcode
OrangeJiuce9 小时前
【QT中的一些高级数据结构,持续更新中...】
数据结构·c++·qt