head.h
#ifndef _HEAD_H_
#define _HEAD_H_
#include <stdio.h>
#include <string.h>
enum type
{
FALUSE=-1,
SUCCESS
};
#define MAX 9//数组大小
typedef int datatype; //重新定义数组类型
typedef struct sqlist//顺序表结构体
{
datatype data[MAX];
int len;
}*sqlist;
//sqlist是struct Sqlist*的别名
//申明函数
sqlist creat_sqlist();
int output();
int insert_rear();
int delete_rear();
int search_index();
int index_change();
int index_insert();
int index_delete();
int key_delete();
int key_search();
int key_change();
int rm_re();
int maopao();
#endif
main.c
#include "head.h"
int main(int argc, const char *argv[])
{ //创建顺序表
sqlist list=creat_sqlist();
//顺序表尾部插入
datatype element;
for(int i=0;i<MAX;i++)
{
printf("please enter element:");
scanf("%d",&element);
insert_rear(list,element);
}
//打印输出
output(list);
//尾部删除
delete_rear(list);
delete_rear(list);
delete_rear(list);
printf("\ndelete have done\n");
output(list);
//查找
int index;
printf("请输入查找编号:\n");
scanf("%d",&index);
search_index(index,list);
//修改
int index1,element1;
printf("请输入修改编号:\n");
scanf("%d",&index1);
printf("请输入修改后的值:\n");
scanf("%d",&element1);
index_change(index1,list,element1);
output(list);
//根据下标插入
int index2,element2;
printf("请输入插入编号:\n");
scanf("%d",&index2);
printf("请输入插入后的值:\n");
scanf("%d",&element2);
index_insert(index2,list,element2);
output(list);
//根据下标删除
int index3,element3;
printf("请输入删除编号:\n");
scanf("%d",&index3);
index_delete(index3,list);
output(list);
//按元素删除
datatype key1;
printf("请输入删除元素:\n");
scanf("%d",&key1);
key_delete(key1,list);
output(list);
//按元素查找
datatype key2;
int ret;
printf("请输入查找元素:\n");
scanf("%d",&key2);
ret=key_search(key2,list);
printf("\n%d\n",ret);
//按元素修改
datatype key3,element4;
printf("请输入修改元素:\n");
scanf("%d",&key3);
printf("请输入修改之后的元素:\n");
scanf("%d",&element4);
key_change(key3,list,element4);
output(list);
//去重
rm_re(list);
output(list);
//冒泡排序
maopao(list);
output(list);
return 0;
}
test.c(去重函数和排序函数尚未完善)
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
//顺序表创建函数
sqlist creat_sqlist()
{
//申请堆区内存
sqlist list=(sqlist)malloc(sizeof(struct sqlist));
if(NULL==list)
{
return NULL;
}
//对元素清零
bzero(list->data,sizeof(list->data));
list->len=0;
//返回顺序表
return list;
}
//尾部插入函数
int insert_rear(sqlist list,datatype element)
{
//判断是否为空或NULL
if(NULL==list || list->len==MAX)
{
printf("sqlist full...\n");
return FALUSE;
}
//正常时插入数据
list->data[list->len]=element;
list->len++;
}
//输出函数
int output(sqlist list)
{
//判断是否为空或NULL
if(NULL==list||list->len==0)
{
printf("sqlist empty..\n");
return FALUSE;
}
//循环输出
for(int i=0;i<list->len;i++)
{
printf("%d ",list->data[i]);
}
putchar(10);
return SUCCESS;
}
//尾部删除函数
int delete_rear(sqlist list)
{
//判断是否为空或NULL
if(NULL==list||list->len==0)
{
printf("sqlist empty...\n");
return FALUSE;
}
//删除,len--即可
list->len--;
return SUCCESS;
}
//下标查询函数
int search_index(int index,sqlist list)
{
//判断是否为空或NULL或非法
if(NULL==list||list->len==0||index<0||index>=list->len)
{
printf("error\\n");
return FALUSE;
}
//index查找
printf("%d\n",list->data[index]);
return SUCCESS;
}
//下标修改函数
int index_change(int index,sqlist list,int element)
{
//判断是否为空为NULL或非法
if(NULL==list||list->len==0||index<0||index>=list->len)
{
printf("error\n");
return FALUSE;
}
//覆盖修改
list->data[index]=element;
return SUCCESS;
}
//下标插入函数
int index_insert(int index,sqlist list,int element)
{
if(NULL==list||list->len==MAX||index<0||index>list->len)
{
printf("error\n");
return FALUSE;
}
for(int i=list->len-1;i>=index;i--)
{
list->data[i+1]=list->data[i];
}
list->data[index]=element;
list->len++;
return SUCCESS;
}
//下标删除函数
int index_delete(int index,sqlist list)
{
if(NULL==list||list->len==0||index<0||index>=list->len)
{
printf("error\n");
return FALUSE;
}
for(int i=index+1;i<=list->len-1;i++)
{
list->data[i-1]=list->data[i];
}
list->len--;
return SUCCESS;
}
//按元素进行删除
int key_delete(datatype key,sqlist list)
{
int flag;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==key)
{ //找到下标,调用下标删除函数
flag=index_delete(i,list);
}
}
return flag;
}
//按元素查询(下标)
int key_search(datatype key,sqlist list)
{
for(int i=0;i<list->len;i++)
{
if(list->data[i]==key)
{
return i;
}
}
return FALUSE;
}
int key_change(datatype key,sqlist list,datatype element)
{
int flag;
for(int i=0;i<list->len;i++)
{
if(list->data[i]==key)
{
//找到下标,调用下标修改函数
flag=index_change(i,list,element);
}
}
return flag;
}
//去重函数
int rm_re(sqlist list)
{
//判断是否为空为NULL或非法
if(NULL==list||list->len==0)
{
printf("error\n");
return FALUSE;
}
int i,j;
for(i=0;i<list->len;i++)
{
for(j=i+1;j<list->len;j++)
{ if(list->data[j]=list->data[i])
{
index_delete(j,list);
j--;
}
}
}
return SUCCESS;
}
int maopao(sqlist list)
{
//判断是否为空为NULL或非法
if(NULL==list||list->len==0)
{
printf("error\n");
return FALUSE;
}
int i,j;
for(i=1;i<list->len;i++)
{
for(j=0;j<list->len-i;j++)
{
datatype temp;
if(list->data[j]>list->data[j+1])
{ temp=list->data[j];
list->data[j]=list->data[j+1];
list->data[j+1]=temp;
}
}
}
return SUCCESS;
}