头文件: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;
}
运行结果:
