数据结构DAY1
顺序表
函数
头文件
头文件
#include"seqlist.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
0.结构体定义
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}seqList;
1.按值修改顺序表
int listUpdateValue(seqList *S,datatype des,datatype sou)
{
int x=0,i;
if(listEmpty(S))
{
printf("空表,查找失败\n");
return -1;
}
for ( i=0;i<S->len;i++)
{
if(des==S->data[i])
{
S->data[i]=sou;
x=1;
}
}
if(x==1)
{
printf("修改成功\n");
return 0;
}
else if(i==S->len)
{
printf("修改失败,无需要修改的值\n");
return -2;
}
}
2.按位置查找,返回对应的值
int listSearchPos(seqList *S,int pos,datatype *des)
{
if(listEmpty(S))
{
printf("空表,查找失败\n");
return -1;
}
if(pos<0 || pos>S->len-1 )
{
printf("下标超出界限!\n");
return -2;
}
*des=S->data[pos];
return 0;
}
3. 选择排序(降序)
int listSort_choice(seqList *S)
{
int i,j;
datatype e;
for(i=0;i<S->len;i++)
{
int max=i;
for(j=i+1;j<S->len;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;
}
memset(S->data,0,sizeof(S->data));
S->len=0;
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;i<S->len;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;i<S->len;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;i<S->len;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;i<S->len;i++)
{
for(j=0;j<S->len-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;i<S->len;i++)
{
for(j=1+i;j<S->len;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");
}