7.22数据结构——顺序表

发布于:2025-07-25 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、思维导图

在这里插入图片描述

二、实现顺序表的功能代码

head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//数组的最大长度
#define MAXSIZE 5

enum type
{
	FALUSE=-1,//用于失败返回的
	SUCCESS//用于成功返回的
};
//给数据元素的类型起别名
typedef int datatype;
//定义顺序表的结构体
//
typedef struct sqlist
{
	//数据元素
	datatype data[MAXSIZE];
	//顺序表长度:实际的元素个数 
	int len;
}*sqlist;

//创建顺序表
sqlist create_sqlist();
//尾部插入
int insert_rear(sqlist list,datatype element);
//循环输出
int output(sqlist list);
//尾删
int delate_rear(sqlist list);
//按下标查找
int search_index(sqlist list,datatype index);
//按下标删除
int delate_index(sqlist list,datatype index);
//按下标修改
int change_index(sqlist list,int index,int element);
//按下标插入
int insert_index(sqlist list,int index,int element);
//去重
int de_weight(sqlist list);
//顺序表排序
int sort(sqlist list);
//按元素查找
int search_yuansu(sqlist list,int number);
//按元素删除
int delate_yuansu(sqlist list,int number);
//按元素修改
int change_yuansu(sqlist list,int number,int element);


#endif

test.c

#include "head.h"

//顺序表内存申请
sqlist create_sqlist()
{
	sqlist list=(sqlist)malloc(sizeof(struct sqlist));
	if(NULL==list)
	{
		return NULL;
	}
	//堆区内存申请成功
	//对数据元素清0
	bzero(list->data,sizeof(list->data));
	//对顺序表长度清0
	list->len=0;
	
	//返回顺序表
	return list;
}

//顺序表尾部插入
int insert_rear(sqlist list,datatype element)
{
	//1.判断顺序表是否为满
	//2.判断顺序表是否为NULL
	if(NULL==list||list->len==MAXSIZE)
	{
		printf("sqlist full..\n");
		return FALUSE;
	}
	//3.在顺序表尾部插入
	list->data[list->len]=element;
	list->len++;
	return SUCCESS;
}

//循环打印顺序表
int output(sqlist list)
{
	//1.判断顺序表是否为空
	//2.判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("output error...\n");
		return FALUSE;
	}
	//循环输出
	for(int i=0;i<list->len;i++)
	{
		printf("%d\t",list->data[i]);
	}
	putchar(10);
}

//尾删
int delate_rear(sqlist list)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("delate_rear error..\n");
		return FALUSE;
	}
	//删除
	list->len--;
	return SUCCESS;
}

//按下标查找
int search_index(sqlist list,datatype index)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0||index<0||index>=list->len)
	{
		printf("search_index error...\n");
		return FALUSE;
	}
	//输出查找的值
	printf("%d\n",list->data[index]);
	return SUCCESS;
}

//按下标删除
int delate_index(sqlist list,datatype index)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	//判断是否在顺序表空间内
	if(list==NULL||list->len==0||index<0||index>=list->len)
	{
		printf("delate_index error...\n");
		return FALUSE;
	}
	for(int i=index;i<list->len;i++)
	{
		list->data[i]=list->data[i+1];
	}
	list->len--;
	return SUCCESS;
}

//按下标修改
int change_index(sqlist list,int index,int element)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	//判断是否在顺序表空间内
	if(list==NULL||list->len==0||index<0||index>=list->len)
	{
		printf("change_index error...\n");
		return FALUSE;
	}
	list->data[index]=element;
	return SUCCESS;
}

//按下标插入
int insert_index(sqlist list,int index,int element)
{
	//判断顺序表是否为NULL
	//判断是否在顺序表空间内
	if(list==NULL||index<0||index>list->len)
	{
		printf("insert_index error...\n");
		return FALUSE;
	}
	if(list->len==MAXSIZE)
	{
		printf("内存已满无法插入\n");
		return FALUSE;
	}
	list->len++;
	for(int i=list->len;i>index;i--)
	{
		list->data[i-1]=list->data[i-2];
	}
	list->data[index]=element;
	return SUCCESS;
}

//去重
int de_weight(sqlist list)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("de_weight error..\n");
		return FALUSE;
	}
	for(int i=0;i<list->len;i++)
	{
		for(int j=i+1;j<list->len;j++)
		{
			if(list->data[i]==list->data[j])
			{
				delate_index(list,j);
				j--;
			}
		}
	}
	return SUCCESS;
}

//顺序表排序
int sort(sqlist list)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("sort error..\n");
		return FALUSE;
	}
	for(int i=0;i<list->len-1;i++)
	{
		for(int j=0;j<list->len-i-1;j++)
		{
			if(list->data[j]>list->data[j+1])
			{
				int temp=list->data[j];
				list->data[j]=list->data[j+1];
				list->data[j+1]=temp;
			}
		}
	}
	return SUCCESS;
}

//按元素查找
int search_yuansu(sqlist list,int number)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("sort error..\n");
		return FALUSE;
	}
	for(int index=0;index<list->len;index++)
	{
		if(list->data[index]==number)
		{
			return index;
		}
	}
	return FALUSE;
}
//按元素删除
int delate_yuansu(sqlist list,int number)
{
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("delate_yuansu error..\n");
		return FALUSE;
	}
	int index=search_yuansu(list,number);
	delate_index(list,index);
	return SUCCESS;
}
//按元素修改
int change_yuansu(sqlist list,int number,int element)
{	
	//判断顺序表是否为空
	//判断顺序表是否为NULL
	if(list==NULL||list->len==0)
	{
		printf("change_yuansu error..\n");
		return FALUSE;
	}
	int index=search_yuansu(list,number);
	change_index(list,index,element);
	return SUCCESS;
}

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
	//1.定义一个顺序表
	sqlist list=create_sqlist();
		datatype element;
	//2.顺序表尾部插入
	for(int i=0;i<MAXSIZE;i++)
	{
		printf("请输入一个值:");
		scanf("%d",&element);
		insert_rear(list,element);
	}
	//3.循环打印顺序表 
	output(list);

	//4.尾部删除
	delate_rear(list);
	delate_rear(list);
	printf("尾删之后;");
	output(list);
	
	//5.按下标查找	
	int index;
	printf("输入要查找的下标的值:");
	scanf("%d",&index);
	search_index(list,index);
	
	//6.按下标修改
	printf("输入要修改的下标:");
	scanf("%d",&index);
	printf("输入要改成的值:");
	scanf("%d",&element);
	change_index(list,index,element);
	
	output(list);

	//7.按下标删除
	printf("输入要删除值的下标:");
	scanf("%d",&index);
	delate_index(list,index);

	
	output(list);
	//8.按下标插入
	printf("输入要插入值的下标:");
	scanf("%d",&index);
	printf("输入要插入的值:");
	scanf("%d",&element);
	insert_index(list,index,element);

	//9.去重0
	de_weight(list);
	printf("去重后的结果:");
	output(list);


	//10.顺序表排序
	sort(list);
	printf("顺序表排序后的结果:");
	output(list);

	//11.按元素查找
	index=search_yuansu(list,14);
	printf("元素查找的下标:");
	printf("%d\n",index);
	
	//12.按元素删除
	delate_yuansu(list,14);
	printf("按元素删除后的结果:");
	output(list);

	//13.按元素修改
	change_yuansu(list,14,54);
	printf("按元素修改后的结果:");
	output(list);

	//14.顺序表释放内存
	free(list);
	list=NULL;
	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到