head.h
#ifndef __HEAD_H_
#define __HEAD_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define MAXSIZE 7 //线性表长度
typedef int datatype; //给int起的别名
//定义顺序表:数据元素 顺序表长度
typedef struct
{
//数据元素
datatype data[MAXSIZE];
//顺序表长度
int len;
}seqlist;
seqlist *create();
int my_full(seqlist *list);
int my_empty(seqlist *list);
int my_insert(seqlist *list,datatype num);
void my_output(seqlist *list);
//===========================================
int my_search(seqlist *list,datatype key);
int my_delete(seqlist *list,int index);
void my_bubble(seqlist *list);
#endif
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
seqlist *list =create();
//循环在尾部插入
int n=0;
datatype num=0;
printf("请输入元素的个数:");
scanf("%d",&n);
printf("\n");
for(int i=0;i<n;i++)
{
printf("请输入要输入的第%d个值:",i+1);
scanf("%d",&num);
my_insert(list,num);
}
my_output(list);
//=============================================
//按元素来查找下标
datatype key;
printf("请输入要删除的元素:");
scanf("%d",&key);
int index = my_search(list,key);
if(index==-1)
{
printf("查找失败!\n");
}else
{
printf("\n");
printf("所要删除的元素的下标为:%d\n",index);
}
printf("\n");
//按元素来删除
my_delete(list,index);
printf("删除后顺序表存储的元素为:\n\n");
my_output(list);
//冒泡排序
my_bubble(list);
printf("排序后的元素为:");
my_output(list);
return 0;
}
test.c
#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 my_full(seqlist *list)
{
return list->len==MAXSIZE?-1:0;
}
/*
* function: 判断顺序表是否空
* @param [ in] 顺序表
* @param [out]
* @return 成功返回0,失败返回-1
*/
int my_empty(seqlist *list)
{
return list->len==0?-1:0;
}
/*
* function: 在尾部插入
* @param [ in] 顺序表 插入的值num
* @param [out]
* @return 成功返回0,失败返回-1
*/
int my_insert(seqlist *list,datatype num)
{
//首先判断顺序表是否为满,顺序表为满时插入失败
if(my_full(list))
{
printf("顺序表已满,插入失败!\n");
return -1;
}
list->data[list->len]=num;
list->len++;
return 0;
}
/*
* function: 顺序表输出
* @param [ in] 顺序表
* @param [out]
* @return 无返回值
*/
void my_output(seqlist *list)
{
printf("\n");
for(int i=0;i<list->len;i++)
{
printf("%d\t",list->data[i]);
}
printf("\n");
printf("\n");
}
//========================================
/*
* function: 按元素来查找下标
* @param [ in] 顺序表 所需要查找的元素
* @param [out]
* @return 成功返回0,失败返回-1
*/
int my_search(seqlist *list,datatype key)
{
for(int i=0;i<list->len;i++)
{
if(list->data[i]==key)
{
return i;
}
}
return -1;
}
/*
* function: 按元素来删除
* @param [ in] 顺序表 下标
* @param [out]
* @return 成功返回0,失败返回-1
*/
int my_delete(seqlist *list,int index)
{
//首先来判断顺序表是否为空
//再来判断顺序表下标是否合法
if(my_empty(list)||index<0||index>=list->len)
{
printf("删除失败!");
return -1;
}
//删除,循环前移
for(int i=index+1;i<list->len;i++)
{
list->data[i-1]=list->data[i];
}
list->len--;
}
//===========================================
/*
* function: 顺序表排序
* @param [ in] 顺序表
* @param [out]
* @return 无返回值
*/
void my_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 number=list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=number;
count++;
}
}
if(count==0)
break;
}
}