数据结构DAY1
顺序表
函数
头文件
头文件
#include"seqlist.h"
#include
#include
#include
0.结构体定义
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}seqList;
1.按值修改顺序表
//按值修改顺序表
int listUpdateValue(seqList *S,datatype des,datatype sou) //des表示要修改的值,
//sou表示要修改成的值
{
int x=0,i;
if(listEmpty(S))
{
printf("空表,查找失败n");
return -1; //-1表示空表
}
for ( i=0;ilen;i++) //寻找对应的值并进行修改
{
if(des==S->data[i])
{
S->data[i]=sou;
x=1;
}
}
if(x==1) //判断是否修改过值
{
printf("修改成功n");
return 0; //0表示修改成功
}
else if(i==S->len)
{
printf("修改失败,无需要修改的值n");
return -2; //-2表示无需要修改的值
}
}
2.按位置查找,返回对应的值
//按位置查找,返回对应的值
int listSearchPos(seqList *S,int pos,datatype *des) //des存放找的值
{
if(listEmpty(S))
{
printf("空表,查找失败n");
return -1; //-1表空
}
if(pos<0 || pos>S->len-1 )
{
printf("下标超出界限!n");
return -2; //-2表下标超出界限
}
*des=S->data[pos];
return 0;
}
3. 选择排序(降序)
//选择排序
int listSort_choice(seqList *S)
{
int i,j;
datatype e;
for(i=0;ilen;i++)
{
int max=i;
for(j=i+1;jlen;j++)
{
if(S->data[j]>S->data[max])
{
max=j;
}
}
e=S->data[i];
S->data[i]=S->data[max];
S->data[max]=e;
}
}
4.创建顺序表
//创建顺序表
seqList* list_Create()
{
seqList* S=(seqList *)malloc(sizeof(seqList));
if (S==NULL)
{
printf("创建失败n");
return NULL;
}
//初始化顺序表 方法1
memset(S->data,0,sizeof(S->data));
S->len=0;
//初始化顺序表 方法2
memset(S,0,sizeof(*S));
printf("创建成功n");
return S;
}
5.判断顺序表是否为空
//判断空_____________________________________________
int listEmpty(seqList* S)
{
if(NULL==S)
{
printf("所给顺序表不合法n");
exit(0);
}
return S->len==0?1:0;
}
6.判断顺序表是否为满
//判断满_______________________________________________________
int listFull(seqList *S)
{
return S->len==MAX ? 1:0;
}
7.遍历顺序表
//遍历________________________________________________
void list(seqList* S)
{
int i;
if(S->len==0)
{
printf("啥也没有,输出个鬼!n");
}
else
{
for (i=0;ilen;i++)
{
printf("t%d",S->data[i]);
}
printf("n");
}
}
8.任意位置插入
//任意位置插入
int listInsertPos(seqList *S,int pos ,datatype e)
{
int i;
if( listFull(S))
{
printf("顺序表已满,添加失败n");
return -1;
}
if(pos>=MAX || pos<0)
{
printf("下标超出界限!n");
return -2;
}
for(i=S->len-1;i>=pos;i--)
{
S->data[i+1]=S->data[i];
}
S->data[pos]=e;
printf("插入成功!n");
S->len++;
return 0;
}
9.任意位置删除
//任意位置删除
int listDeletePos(seqList *S,int pos )
{
int i;
if(listEmpty(S) || pos<0 ||pos >S->len-1 )
{
printf("删除失败n");
return -1;
}
for (i=pos+1;ilen;i++)
{
S->data[i-1]=S->data[i];
}
S->len--;
printf("删除成功n");
return 0;
}
10.按值查找,返回对应的位
//按值查找,返回对应的位置
int listSearchValue(seqList *S,datatype e)
{
if(listEmpty(S))
{
printf("空表,查找失败n");
return -1; //表空
}
for(int i=0;ilen;i++)
{
if(e==S->data[i])
{
return i;
}
}
return -2; //表中未找到
}
11.按位置修改顺序表
//按位置修改
int listUpdatePos(seqList *S,int pos,datatype e)
{
if(listEmpty(S) || pos<0 ||pos >S->len-1 )
{
printf("修改失败n");
return -1;
}
S->data[pos]=e;
printf("修改成功n");
return 0;
}
12.冒泡排序
//冒泡排序
int listSort(seqList *S)
{
int i,j;
datatype e;
for(i=1;ilen;i++)
{
for(j=0;jlen-i;j++)
{
if(S->data[j]>S->data[j+1])
{
e=S->data[j];
S->data[j]=S->data[j+1];
S->data[j+1]=e;
}
}
}
}
13.去重
//去重
int listDeleteRepeat(seqList *S)
{
if(S->len<=1)
{
printf("去重失败n");
return -1;
}
int i,j;
for (i=0;ilen;i++)
{
for(j=1+i;jlen;j++)
{
if(S->data[i]==S->data[j])
{
listDeletePos(S,j);
j--;
}
}
}
}
14.释放顺序表
//释放
void listFree (seqList **S)
{
if(NULL!=*S)
{
free(*S);
}
*S=NULL;
printf("释放成功!n");
}