seqlist.h :
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include
#include
#include
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX]; //存储顺序表的数组
int len;//存储顺序表实际长度
}seqlist;
//创建顺序表
seqlist* listCreate();
//判空函数
int listEmpty(seqlist *S);
//判满函数
int listFULL(seqlist *S);
//添加元素
int listAdd(seqlist *S,datatype e);
//显示元素
void listShow(seqlist *S);
//任意位置插入
int listInsertPos(seqlist *S,int pos,datatype e);
//任意位置删除
int listDeletePos(seqlist *S,int pos);
//按值查找,返回对应的位置
int listSearchValue(seqlist *S,datatype e);
//按位置查找,返回对应的值
datatype listSearchPos(seqlist *S,int pos);
//按值修改
int listUpdateValue(seqlist *S,datatype old_e,datatype new_e);
//按位置修改
int listUpdatePos(seqlist *S,int pos,datatype new_e);
//排序
void listSort(seqlist *S);
//去重
void listDeleteRepeat(seqlist *S);
//释放表
void listFree(seqlist *S);
#endif
seqlist.c :
#include "seqlist.h"
//创建顺序表
seqlist* listCreate()
{
//在堆区申请一个顺序表的空间,将申请的地址给S
seqlist *S=(seqlist*)malloc(sizeof(seqlist));
if( NULL == S )
{
printf("申请失败n");
return NULL;
}
memset(S->data,0,sizeof(S->data));//将顺序表的数组清0
S->len = 0;//顺序表的长度初始化
printf("创建顺序表成功n");
return S;
}
//判空函数-----------------------------------------------
int listEmpty(seqlist *S)
{
if ( NULL == S )
{
printf("所给顺序表不合法n");
exit(0);
}
return S->len==0? 1:0; // 1表示空,0表示非空
}
//判满函数-----------------------------------------------
int listFULL(seqlist *S)
{
if ( NULL == S )
{
printf("所给顺序表不合法n");
exit(0);
}
return S->len==MAX? 1:0; // 1表示满,0表示非满
}
//添加元素--------------------------------------------------
int listAdd(seqlist *S,datatype e)
{
//判断逻辑
if(listFULL(S))
{
printf("顺序表满,添加失败n");
return -1;
}
//添加逻辑
S->data[S->len] = e;
//表的变化
S->len++;
printf("数据添加成功n");
return 0;
}
//显示元素-------------------------------------------
void listShow(seqlist *S)
{
if(listEmpty(S))
{
printf("顺序表为空n");
return;
}
for(int i = 0;i < S->len;i++)
{
printf("下标%d:%dn",i,S->data[i]);
}
printf("遍历成功n");
}
//任意位置插入---------------------------------------
int listInsertPos(seqlist *S,int pos,datatype e)
{
if(pos < 0 || pos > S->len || listFULL(S))
{
printf("插入非法!n");
return -1;
}
for(int i = S->len-1;i >= pos;i--)
{
S->data[i+1] = S->data[i];
}
S->data[pos] = e;
S->len++;
printf("插入成功!n");
return 0;
}
//任意位置删除---------------------------------------
int listDeletePos(seqlist *S,int pos)
{
if(pos < 0 || pos > S->len-1 || listEmpty(S))
{
printf("删除非法!n");
return -1;
}
for(int i = pos;i < S->len;i++)
{
S->data[i]=S->data[i+1];
}
S->len--;
printf("删除%d成功!n",S->data[pos]);
return 0;
}
//按值查找,返回对应的位置----------------------------
int listSearchValue(seqlist *S,datatype e)
{
if(listEmpty(S))
{
printf("数据表为空,无法查找n");
return -1;
}
for(int i = 0;i < S->len;i++)
{
if(S->data[i] == e)
{
return i;
}
}
return -2;
}
//按位置查找,返回对应的值-----------------------------
datatype listSearchPos(seqlist *S,int pos)
{
if(pos < 0 || pos > S->len-1 || listEmpty(S))
{
printf("查找非法!n");
return -1;
}
return S->data[pos];
}
//按值修改--------------------------------------------
int listUpdateValue(seqlist *S,datatype old_e,datatype new_e)
{
for(int i = 0;i < S->len -1;i++)
{
if(S->data[i] == old_e)
{
S->data[i] = new_e;
}
}
printf("所有%d值成功修改为%dn",old_e,new_e);
return 0;
}
//按位置修改-----------------------------------------
int listUpdatePos(seqlist *S,int pos,datatype new_e)
{
if(listEmpty(S) || pos < 0 ||pos > S->len-1)
{
printf("修改失败n");
return -1;
}
S->data[pos] = new_e;
printf("下标%d成功修改为%dn",pos,new_e);
return 0;
}
//排序-----------------------------------------------
void listSort(seqlist *S)
{
int i;
int j;
int temp;
int index;
int min;
for(i=0; ilen; i++)
{
min = S->data[0];
index = i;
for(j=i+1; j < S->len ; j++)
{
if(min < S->data[j])
{
min = S->data[j];
index = j;
}
}
if(index != i)
{
temp = S->data[i];
S->data[i] = S->data[index];
S->data[index] = temp;
}
}
printf("排序成功n");
}
//去重-----------------------------------------------
void listDeleteRepeat(seqlist *S)
{
for(int i = 0;i < S->len -1;i++)
{
for(int j = i + 1;j < S->len ;j++)
{
if(S->data[i] == S->data[j])
{
listDeletePos(S,j);
j--;
}
}
}
printf("去重成功n");
}
//释放表-----------------------------------------------
void listFree(seqlist *S)
{
if(NULL != S)
{
free(S);
}
S = NULL;
printf("释放成功n");
}
main.c :
#include "seqlist.h"
int main(int argc, const char *argv[])
{
//创建数据表函数
printf("----调用创建函数---n");
seqlist *S = listCreate();
if ( NULL == S )
{
return -1;
}
//调用添加函数
printf("----调用添加函数---n");
listAdd(S,2);
listAdd(S,5);
listAdd(S,2);
listAdd(S,5);
listAdd(S,2);
listAdd(S,5);
listAdd(S,2);
listAdd(S,5);
listAdd(S,2);
listAdd(S,7);
listAdd(S,7);
listAdd(S,7);
listAdd(S,7);
listAdd(S,7);
listAdd(S,2);
listAdd(S,5);
//调用显示数据函数
printf("----显示数据函数---n");
listShow(S);
//调用插入函数
printf("------插入函数-----n");
listInsertPos(S,1,3);
listShow(S);
//调用删除函数
printf("------删除函数-----n");
listDeletePos(S,1);
listShow(S);
//按值查找,返回对应的位置
printf("-------按值查找-----n");
datatype e = 7;
int res = listSearchValue(S,e);
if(res >= 0)
{
printf("查找成功,%d在下标%d的位置n",e,res);
}else if (res == -1)
{
printf("表空n");
}else if (res == -2)
{
printf("没有该值n");
}
//按位置查找,返回对应的值
printf("-------按位置查找-----n");
int pos = 2;
int res2 = listSearchPos(S,pos);
if(res2 != -1)
{
printf("查找成功,下标%d位置上值为:%dn",pos,res2);
}else
{
printf("查找非法!n");
}
//按值修改
printf("--------按值修改------n");
listUpdateValue(S,1,3);
//按位置修改
printf("-------按位置修改-----n");
listUpdatePos(S,2,100);
listShow(S);
//排序
printf("---------排序-------n");
listSort(S);
listShow(S);
//去重
printf("---------去重-------n");
listDeleteRepeat(S);
listShow(S);
//调用释放表函数
printf("---------释放-------n");
listFree(S);
S = NULL;
listShow(S);
return 0;
}
执行结果:
----调用创建函数---
创建顺序表成功
----调用添加函数---
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
数据添加成功
----显示数据函数---
下标0:2
下标1:5
下标2:2
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
------插入函数-----
插入成功!
下标0:2
下标1:3
下标2:5
下标3:2
下标4:5
下标5:2
下标6:5
下标7:2
下标8:5
下标9:2
下标10:7
下标11:7
下标12:7
下标13:7
下标14:7
下标15:2
下标16:5
遍历成功
------删除函数-----
删除5成功!
下标0:2
下标1:5
下标2:2
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
-------按值查找-----
查找成功,7在下标9的位置
-------按位置查找-----
查找成功,下标2位置上值为:2
--------按值修改------
所有1值成功修改为3
-------按位置修改-----
下标2成功修改为100
下标0:2
下标1:5
下标2:100
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
---------排序-------
排序成功
下标0:100
下标1:5
下标2:2
下标3:5
下标4:2
下标5:5
下标6:2
下标7:5
下标8:2
下标9:7
下标10:7
下标11:7
下标12:7
下标13:7
下标14:2
下标15:5
遍历成功
---------去重-------
删除2成功!
删除2成功!
删除2成功!
删除0成功!
删除2成功!
删除2成功!
删除7成功!
删除0成功!
删除7成功!
删除7成功!
删除7成功!
删除0成功!
去重成功
下标0:100
下标1:5
下标2:2
下标3:7
遍历成功
---------释放-------
释放成功
所给顺序表不合法