头文件
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>#define MAXSIZE 7//线性表长度
typedef int datatype;
//定义顺序表:数据结构,顺序表长度
typedef struct
{
//数据元素
datatype data[MAXSIZE];
//顺序表长度
int len;}seqlist;
//函数声明
seqlist *create();
int full_seqlist(seqlist *list);
int insert_rear(seqlist *list,datatype e);
void output_seqist(seqlist *list);
int delete_rear(seqlist *list);
int search_sub(seqlist *list,int sub);
int update_seqlist(seqlist *list ,int sub,int datatype);
int insert_sub(seqlist *list ,int sub,datatype e);int delete_sub(seqlist *list,int sub);
int search_data(seqlist *list, datatype e);
int sort_seqlist(seqlist *list);
int removal_seqlist(seqlist *list);
int delete_seqlist(seqlist *list,datatype e);seqlist *free_space(seqlist *seq);
#endif
自定义文件
#include"head.h"
/*
* function: 在堆区申请顺序表
* @param [ in] 申请一个顺序表的空间
* @param [out]
* @return 成功返回地址,失败返回NULL
*/
seqlist *create()
{
seqlist *list = (seqlist *)malloc(sizeof(seqlist));
if(list == NULL)
return NULL;
list->len = 0; //把顺序表清空
return list;
}/*
* function: 判断数据表满的函数
* @param [ in] 顺序表
* @param [out]
* @return 成功返回0,失败返回-1
*/
int full_seqlist(seqlist *list)
{
return list->len == MAXSIZE ? -1 : 0;
}
/*
* function: 判断数据表是否为空
* @param [ in] 顺序表
* @param [out]
* @return 成功返回0,失败返回-1
*/
int empty_seqlist(seqlist *list)
{
return list->len == 0 ? -1 : 0;
}/*
* function: 在尾部插入
* @param [ in] 顺序表 插入的值
* @param [out]
* @return 成功返回0 失败返回-1
*/
int insert_rear(seqlist *list,datatype e)
{
if(full_seqlist(list))
{
printf("顺序表已满\n");
return -1;
}
list->data[list->len] = e;
list->len++;
return 0;
}/*
* function: 循环输出
* @param [ in] 顺序表
* @param [out]
* @return 无返回值
*/
void output_seqist(seqlist *list)
{
puts("");
for(int i = 0; i < list->len; i++)
{
printf("%d\t",list->data[i]);
}
puts("");
}/*
* function: 删除尾部元素
* @param [ in]
* @param [out]
* @return 成功返回0,失败返回-1
*/
int delete_rear(seqlist *list)
{
if(empty_seqlist(list))
{
printf("顺序表为空\n");
return -1;
}
list->len--;
return 0;
}
/*
* function: 按下标查找
* @param [ in] 顺序表 查找的下标
* @param [out]
* @return 成功返回0,失败返回0
*/
int search_sub(seqlist *list,int sub)
{
//1.判断是否为空,下标是否合法
if(empty_seqlist(list) || sub <0 || sub >= list->len)
{
printf("顺序表查找失败\n");
return -1;
}
//查找输出
printf("查找的元素是%d\n",list->data[sub]);
return 0;
}
/*
* function: 修改顺序表某一下标的值
* @param [ in] 顺序表 下标 要修改的值
* @param [out]
* @return 成功返回0失败返回-1
*/
int update_seqlist(seqlist *list ,int sub,datatype e)
{
if(empty_seqlist(list) || sub <0 || sub >= list->len)
{
printf("修改失败\n");
return -1;
}
list->data[sub] = e;
return 0;
}
/*
* function: 插入顺序表按下标插入
* @param [ in]
* @param [out]
* @return 成功返回0,失败返回-1
*/
int insert_sub(seqlist *list ,int sub,datatype e)
{
if(full_seqlist(list) || sub <0 || sub >list->len)
{
printf("插入失败\n");
return -1;
}
for(int i = list->len -1; i >= sub; i--)
{
list->data[i+1] = list->data[i];
}
list->data[sub] = e;
list->len++;
}
/*
* function: 按下标删除
* @param [ in]
* @param [out]
* @return 成功返回0,失败返回-1
*/
int delete_sub(seqlist *list,int sub)
{
if(empty_seqlist(list) || sub <0 || sub >=list->len)
{
printf("删除失败\n");
return -1;
}
for(int i = sub +1; i < list->len; i++)
{
list->data[i-1] = list->data[i];
}
list->len--;
}
/*
* function: 按元素查找
* @param [ in]
* @param [out]
* @return 成功返回下标,失败返回-1
*/
int search_data(seqlist *list, datatype e)
{
int sub = 0;
if(empty_seqlist(list))
{
printf("查找失败\n");
return -1;
}
for(sub = 0; sub < list->len; sub++)
{
if(list->data[sub] == e)
{
return sub;
}
}
return -1;
}/*
* function: 按元素删除
* @param [ in] 顺序表 删除的值key
* @param [out]
* @return 成功返回0,失败返回-1
*/
int delete_seqlist(seqlist *list,datatype e)
{
int flag = search_data(list,e);
if(flag == -1)
{
printf("未找到您要删除的值\n");
return -1;
}
return delete_sub(list,flag);
}
/*
* function: 顺序表排序
* @param [ in] 顺序表
* @param [out]
* @return 成功返回0,失败返回-1
*/
int sort_seqlist(seqlist *list)
{
if(empty_seqlist(list) ||list->len < 2)
{
printf("不需要排序,顺序表长度小于2\n");
return -1;
}
int temp;
for(int i = 1; i < list->len; i++)//躺数
{
int count = 0;
for(int j = 0; j <list->len -i; j++)
{
if(list->data[j] > list->data[j+1])
{
temp = list->data[j];
list->data[j] = list->data[j+1];
list->data[j+1] = temp;
count++;
}
}
if(count == 0)
break;
}
return 0;
}
/*
* function: 顺序表去重
* @param [ in] 顺序表
* @param [out]
* @return 成功返回0失败返回1
*/
int removal_seqlist(seqlist *list)
{if(empty_seqlist(list) ||list->len < 2)
{
printf("不需要排序\n");
return -1;
}
datatype key;
key = list->data[0];//
for(int i = 0; i <list->len; i++)
{
//if()
}
}
seqlist *free_space(seqlist *seq)
{
if(seq == NULL)
return NULL;
free(seq);
seq = NULL;
return seq;
}
主函数文件
#include"head.h"
int main (int argc, const char *argv[])
{
seqlist *list = create();
//循环在尾部插入
int n;
datatype e;
printf("请输入数据元素的个数:");
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
printf("请输入您要插入的值:");
scanf("%d",&e);
insert_rear(list,e);
}
//输出
output_seqist(list);//尾部删除
//delete_rear(list);
//delete_rear(list);
//输出
//output_seqist(list);
//查找按小标
int sub;
printf("请输入您要查找的下标:");
scanf("%d",&sub);
search_sub(list,sub);//修改
printf("请输入您要修改的下标:");
scanf("%d",&sub);
printf("请输入您要修改的值:");
scanf("%d",&e);
update_seqlist(list,sub,e);
//输出
output_seqist(list);//插入
printf("请输入您要插入的下标:");
scanf("%d",&sub);
printf("请输入您要插入的值:");
scanf("%d",&e);
insert_sub(list,sub,e);
//输出
output_seqist(list);
//按下标删除
printf("请输入您要删除的下标:");
scanf("%d",&sub);
delete_sub(list,sub);
//输出
output_seqist(list);
//按元素查询
printf("请输入要查询的元素:");
scanf("%d",&e);
printf("元素的下标为:%d\n",search_data(list,e));//排序
sort_seqlist(list);
printf("排序后的顺序表元素为:\n");
output_seqist(list);//按元素删除
datatype key;
printf("请输入您要删除的值:\n");
scanf("%d",&key);
delete_seqlist(list,key);
output_seqist(list);
//释放
list = free_space(list);
return 0;
}