头文件
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 7
typedef int datatype;//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(seqlist *list);
int delete_rear(seqlist *list);
int search_sub(seqlist *list ,int sub);
int update_sub(seqlist *list ,int sub ,datatype e);
int insert_sub(seqlist *list,int sub ,datatype e);
int delete_sub(seqlist *list,int sub);
int search_data(seqlist *list,datatype e);
int update_data(seqlist *list,datatype e,datatype e_new);
int delete_data(seqlist *list,datatype e);
void bubble(seqlist *list);
#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 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 空输出-1,否则输出0
*/
int empty_seqlist(seqlist *list)
{
return list->len == 0? -1 : 0;
}
/*
* function: 顺序表输出函数
* @param [ in] 顺序表
* @param [out]
* @return 无返回
*/
void output(seqlist *list)
{
printf("输出结果\n");
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,失败输出-1
*/
int search_sub(seqlist *list, int sub)
{
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_sub(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)
{
for(int i = 0;i<list->len;i++)
{
if(list->data[i] == e)
{
return i;
}
}
printf("无对应元素\n");
return -1;
}
/*
* function: 按元素修改
* @param [ in] 顺序表,被修改元素,修改元素
* @param [out]
* @return 成功返回0,失败输出-1
*/
int update_data(seqlist *list,datatype e,datatype e_new)
{
int sub = search_data(list,e);
if(sub == -1)
{
printf("修改失败\n");
return -1;
}
update_sub(list,sub,e_new);
return 0;
}
/*
* function: 按元素删除
* @param [ in] 顺序表,元素
* @param [out]
* @return 成功返回0,失败输出-1
*/
int delete_data(seqlist *list,datatype e)
{
int sub = search_data(list,e);
if(sub == -1)
{
printf("删除失败\n");
}
delete_sub(list,sub);
}
/*
* function: 顺序表排序
* @param [ in] 顺序表
* @param [out]
* @return 无返回
*/
void bubble(seqlist *list)
{
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])
{
datatype temp = list->data[j];
list->data[j] = list->data[j+1];
list->data[j+1] = temp;
count++;
}
}
if(count == 0)
break;
}
}
主程序
#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(list);
//尾部删除
delete_rear(list);
output(list);
//按下标查找
int sub;
printf("请输入下标");
scanf("%d",&sub);
search_sub(list,sub);
//按下标进行修改
printf("请输入修改下标");
scanf("%d",&sub);
printf("请输入修改后的元素");
scanf("%d",&e);
update_sub(list ,sub,e);
output(list);//输出修改后结果
//按下标进行插入
printf("请输入插入下标");
scanf("%d",&sub);
printf("请输入插入后的元素");
scanf("%d",&e);
insert_sub(list ,sub ,e);
output(list);
//按下标删除
printf("请输入删除下标");
scanf("%d",&sub);
delete_sub(list,sub);
output(list);
//按元素查找
printf("请输入查找元素");
scanf("%d",&e);
sub = search_data(list,e);
printf("对应元素下标:%d\n",sub);
//按元素修改
datatype e_new;
printf("请输入被修改元素");
scanf("%d",&e);
printf("请输入修改元素");
scanf("%d",&e_new);
update_data(list,e,e_new);
output(list);
//按元素删除
printf("请输入删除元素");
scanf("%d",&e);
delete_data(list,e);
output(list);
//排序
bubble(list);
output(list);
free(list);
list = NULL;
return 0;
}