学习C语言的数据结构的day1
目录
作业
一、完成按值进行修改函数
二、完成按位置进行查找函数,返回查找到的数据
三、完成使用选择排序实现顺序表降序
总结:代码如下
作业
1>完成按值进行修改函数
2>完成按位置进行查找函数,返回查找到的数据
3>完成使用选择排序实现顺序表降序
一、完成按值进行修改函数
//按值修改
int listUpdateValue(seqlist *s, datatype old_e, datatype new_e)
{
int flag=0;
if(listEmpty(s))
{
printf("空表,查找失败n");
return -1;
}
for(int i=0;ilen;i++)
{
if(old_e == s->data[i])
{
s->data[i]=new_e;
flag++;
}
}
if(0 == flag)
{
printf("修改失败n");
return -1;
}else
{
printf("修改成功n");
return 0;
}
}
二、完成按位置进行查找函数,返回查找到的数据
//按位置查找,返回查找到对应的数据
datatype listSearchPos(seqlist *s, int pos)
{
if(listEmpty(s) || pos < 0 || pos > s->len-1)
{
printf("查找失败n");
return -1;
}
return s->data[pos];
}
三、完成使用选择排序实现顺序表降序
//降序
void listNosort(seqlist *s)
{
int i,k;
datatype temp;
for(i=0;ilen;i++)
{
for(k=1+i;klen;k++)
{
if(s->data[i] < s->data[k])
{
temp=s->data[i];
s->data[i]=s->data[k];
s->data[k]=temp;
}
}
}
printf("降序排序成功n");
}
总结:代码如下
二、完成按位置进行查找函数,返回查找到的数据
//按位置查找,返回查找到对应的数据
datatype listSearchPos(seqlist *s, int pos)
{
if(listEmpty(s) || pos < 0 || pos > s->len-1)
{
printf("查找失败n");
return -1;
}
return s->data[pos];
}
三、完成使用选择排序实现顺序表降序
//降序
void listNosort(seqlist *s)
{
int i,k;
datatype temp;
for(i=0;ilen;i++)
{
for(k=1+i;klen;k++)
{
if(s->data[i] < s->data[k])
{
temp=s->data[i];
s->data[i]=s->data[k];
s->data[k]=temp;
}
}
}
printf("降序排序成功n");
}
总结:代码如下
mian.c
#include#include #include "seqlist.h" #include int main(int argc, const char *argv[]) { seqlist *s=listCreate(); if(NULL == s) { return -1; } listAdd(s,7); listAdd(s,2); listAdd(s,5); listAdd(s,5); listAdd(s,8); listShow(s); listInsertPos(s,1,8); listShow(s); listDeletePos(s,10); listShow(s); int res=listSearchValue(s, 100); if(res >= 0) { printf("查找成功,在第%d个位置n",res); }else if(res == -1) { printf("表空,查找失败n"); }else if(res == -2) { printf("没找到您要查找的元素n"); } listUpdatePos(s,0,100); listShow(s); listSort(s); listShow(s); listNosort(s); listShow(s); printf("*****n"); listUpdateValue(s,8,7); listShow(s); listDeleteRepeat(s); listShow(s); listFree(s); s=NULL; listShow(s); return 0; }
seqlist.c
#include#include #include "seqlist.h" #include //创建//顺序表 seqlist* listCreate() { seqlist *s=(seqlist*)malloc(sizeof(seqlist)); if(NULL == s) { printf("申请空间失败n"); return NULL; } memset(s->data, 0,sizeof(s->data)); s->len = 0; printf("创建成功n"); return s; } //判空 int listEmpty(seqlist *s) { if(NULL == s) { printf("所给顺序表不合法n"); exit(0); } return s->len==0? 1:0; } //判满 int listFull(seqlist *s) { return s->len==MAX? 1:0; } //添加元素 int listAdd(seqlist *s,datatype e) { if(listFull(s)) { printf("表满,添加失败"); return -1; } s->data[s->len]=e; s->len ++; printf("添加成功n"); return 0; } //遍历函数 void listShow(seqlist *s) { if(NULL == s) { printf("所给顺序表不合法n"); return; } int i=0; for(i=0;i len;i++) { printf(" %d ",s->data[i]); } printf("n"); } //任意位置插入 int listInsertPos(seqlist *s, int pos, datatype e) { if(pos > s->len || 0 > pos) { printf("插入失败,位置不合法n"); return -1; } if(listFull(s)) { printf("表格已满,插入失败n"); return -2; } int i=0; for(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(listEmpty(s) || pos<0 || pos>s->len-1) { printf("删除失败n"); return -1; } int i=0; for(i=pos+1;i len;i++) { s->data[i-1]=s->data[i]; } s->len--; printf("删除成功n"); return 0; } //按值查找,返回对应的位置 int listSearchValue(seqlist *s, datatype e) { if(listEmpty(s)) { printf("空表,查找失败n"); return -1; } for(int i=0;i len;i++) { if(e == s->data[i]) { return i; } } return -2; //表中没找到 } //按位置查找,返回查找到对应的数据 datatype listSearchPos(seqlist *s, int pos) { if(listEmpty(s) || pos < 0 || pos > s->len-1) { printf("查找失败n"); return -1; } return s->data[pos]; } // //按值修改 int listUpdateValue(seqlist *s, datatype old_e, datatype new_e) { if(listEmpty(s)) { printf("空表,查找失败n"); return -1; } for(int i=0;i len;i++) { if(old_e == s->data[i]) { old_e=new_e; return 0; } } printf("修改失败n"); return -1; } //按位置修改 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("修改成功n"); return 0; } //升序 void listSort(seqlist *s) { int i,k; datatype temp; for(i=1;i len;i++) { for(k=0;k len-i;k++) { if(s->data[k] > s->data[k+1]) { temp=s->data[k]; s->data[k]=s->data[k+1]; s->data[k+1]=temp; } } } printf("升序排序成功n"); } //去重 void listDeleteRepeat(seqlist *s) { if(s->len <= 1) { printf("去重失败n"); return; } int i,k; for(i=0;i len;i++) { for(k=i+1;k len;k++) { if(s->data[i] == s->data[k]) { listDeletePos(s,k); k--; } } } printf("去重成功n"); } //释放表 void listFree(seqlist *s) { if(NULL != s) { free(s); } s =NULL; printf("释放成功n"); } //降序 void listNosort(seqlist *s) { int i,k; datatype temp; for(i=1;i len;i++) { for(k=0;k len-i;k++) { if(s->data[k] < s->data[k+1]) { temp=s->data[k]; s->data[k]=s->data[k+1]; s->data[k+1]=temp; } } } printf("降序排序成功n"); } ubuntu@ubuntu:day16$ vi seqlist.c ubuntu@ubuntu:day16$ cat seqlist.c #include #include #include "seqlist.h" #include //创建//顺序表 seqlist* listCreate() { seqlist *s=(seqlist*)malloc(sizeof(seqlist)); if(NULL == s) { printf("申请空间失败n"); return NULL; } memset(s->data, 0,sizeof(s->data)); s->len = 0; printf("创建成功n"); return s; } //判空 int listEmpty(seqlist *s) { if(NULL == s) { printf("所给顺序表不合法n"); exit(0); } return s->len==0? 1:0; } //判满 int listFull(seqlist *s) { return s->len==MAX? 1:0; } //添加元素 int listAdd(seqlist *s,datatype e) { if(listFull(s)) { printf("表满,添加失败"); return -1; } s->data[s->len]=e; s->len ++; printf("添加成功n"); return 0; } //遍历函数 void listShow(seqlist *s) { if(NULL == s) { printf("所给顺序表不合法n"); return; } int i=0; for(i=0;i len;i++) { printf(" %d ",s->data[i]); } printf("n"); } //任意位置插入 int listInsertPos(seqlist *s, int pos, datatype e) { if(pos > s->len || 0 > pos) { printf("插入失败,位置不合法n"); return -1; } if(listFull(s)) { printf("表格已满,插入失败n"); return -2; } int i=0; for(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(listEmpty(s) || pos<0 || pos>s->len-1) { printf("删除失败n"); return -1; } int i=0; for(i=pos+1;i len;i++) { s->data[i-1]=s->data[i]; } s->len--; printf("删除成功n"); return 0; } //按值查找,返回对应的位置 int listSearchValue(seqlist *s, datatype e) { if(listEmpty(s)) { printf("空表,查找失败n"); return -1; } for(int i=0;i len;i++) { if(e == s->data[i]) { return i; } } return -2; //表中没找到 } //按位置查找,返回查找到对应的数据 datatype listSearchPos(seqlist *s, int pos) { if(listEmpty(s) || pos < 0 || pos > s->len-1) { printf("查找失败n"); return -1; } return s->data[pos]; } // //按值修改 int listUpdateValue(seqlist *s, datatype old_e, datatype new_e) { int flag=0; if(listEmpty(s)) { printf("空表,查找失败n"); return -1; } for(int i=0;i len;i++) { if(old_e == s->data[i]) { s->data[i]=new_e; flag++; } } if(0 == flag) { printf("修改失败n"); return -1; }else { printf("修改成功n"); 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("修改成功n"); return 0; } //升序 void listSort(seqlist *s) { int i,k; datatype temp; for(i=1;i len;i++) { for(k=0;k len-i;k++) { if(s->data[k] > s->data[k+1]) { temp=s->data[k]; s->data[k]=s->data[k+1]; s->data[k+1]=temp; } } } printf("升序排序成功n"); } //去重 void listDeleteRepeat(seqlist *s) { if(s->len <= 1) { printf("去重失败n"); return; } int i,k; for(i=0;i len;i++) { for(k=i+1;k len;k++) { if(s->data[i] == s->data[k]) { listDeletePos(s,k); k--; } } } printf("去重成功n"); } //释放表 void listFree(seqlist *s) { if(NULL != s) { free(s); } s =NULL; printf("释放成功n"); } //降序 void listNosort(seqlist *s) { int i,k; datatype temp; for(i=0;i len;i++) { for(k=1+i;k len;k++) { if(s->data[i] < s->data[k]) { temp=s->data[i]; s->data[i]=s->data[k]; s->data[k]=temp; } } } printf("降序排序成功n"); }
seqlist.h
#ifndef _SEQLIST__
#define _SEQLIST__
#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 listNosort(seqlist *s);
//去重
void listDeleteRepeat(seqlist *s);
//释放表
void listFree(seqlist *s);
#endif



