学习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;i<s->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;
}
}
二、完成按位置进行查找函数,返回查找到的数据
//按位置查找,返回查找到对应的数据
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;i<s->len;i++)
{
for(k=1+i;k<s->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");
}
总结:代码如下
mian.c
#include <stdio.h>
#include <string.h>
#include "seqlist.h"
#include <stdlib.h>
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 <stdlib.h>
#include <string.h>
#include "seqlist.h"
#include <stdio.h>
//创建//顺序表
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<s->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<s->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<s->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<s->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<s->len;i++)
{
for(k=0;k<s->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<s->len;i++)
{
for(k=i+1;k<s->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<s->len;i++)
{
for(k=0;k<s->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 <stdlib.h>
#include <string.h>
#include "seqlist.h"
#include <stdio.h>
//创建//顺序表
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<s->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<s->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<s->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<s->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<s->len;i++)
{
for(k=0;k<s->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<s->len;i++)
{
for(k=i+1;k<s->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<s->len;i++)
{
for(k=1+i;k<s->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