1、思维导图
数据结构day3 - 免费思维导图 - 知犀
2、排序
①冒泡排序
![](https://i-blog.csdnimg.cn/blog_migrate/c63c96f582c2086bae6e3880c16cb438.png)
main.c
int main(int argc, const char *argv[])
{
pmp p=list_creat();
int flag;
printf("升序排序输入0,降序排序输入1:\n");
scanf("%d",&flag);
input(p);
printf("-----------------------------\n");
output(p);
printf("-----------------------------\n");
maopao(p,flag);
output(p);
return 0;
}
maopao.c
#include "maopao.h"
pmp list_creat()//创建顺序表
{
pmp p=(pmp)malloc(sizeof(mp));
if(p==NULL)
{
printf("顺序表创建失败\n");
return NULL;
}
memset(p->a,0,sizeof(p->a));
p->b=0;
return p;
}
void input(pmp p)//输入顺序表
{
printf("请依次输入想要存入顺序表的数:\n");
for(int i=0;i<X;i++)
{
scanf("%d",&(p->a[i]));
}
p->b=X;
}
void output(pmp p)//输出顺序表
{
for(int i=0;i<X;i++)
{
printf("%d\t",p->a[i]);
}
putchar(10);
}
void maopao(pmp p,int flag)//冒泡排序
{
if(flag==1)//降序排序
{
for(int i=0;i<X;i++)
{
for(int j=1;j<X-i;j++)
{
if(p->a[j-1]<p->a[j])
{
int t=p->a[j-1];
p->a[j-1]=p->a[j];
p->a[j]=t;
}
}
}
}
if(flag==0)//升序排序
{
for(int i=0;i<X;i++)
{
for(int j=1;j<X-i;j++)
{
if(p->a[j-1]>p->a[j])
{
int t=p->a[j-1];
p->a[j-1]=p->a[j];
p->a[j]=t;
}
}
}
}
}
maopao.h
#ifndef __MAOPAO_H__
#define __MAOPAO_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define X 5
typedef struct l
{
int a[X];
int b;
}mp,*pmp;
pmp list_creat();//创建顺序表
void input(pmp p);//输入顺序表
void output(pmp p);//输出顺序表
void maopao(pmp p,int flag);//冒泡排序
#endif
②简单排序
![](https://i-blog.csdnimg.cn/blog_migrate/6ed57f20ddb3bb7982e9bb9b8c43481b.png)
main.c
#include "jdpx.h"
int main(int argc, const char *argv[])
{
pmp p=list_creat();
int flag;
printf("升序排序输入0,降序排序输入1:\n");
scanf("%d",&flag);
input(p);
printf("-----------------------------\n");
output(p);
printf("-----------------------------\n");
jdpx(p,flag);
output(p);
return 0;
}
jdpx.c
#include "jdpx.h"
pmp list_creat()//创建顺序表
{
pmp p=(pmp)malloc(sizeof(mp));
if(p==NULL)
{
printf("顺序表创建失败\n");
return NULL;
}
memset(p->a,0,sizeof(p->a));
p->b=0;
return p;
}
void input(pmp p)//输入顺序表
{
printf("请依次输入想要存入顺序表的数:\n");
for(int i=0;i<X;i++)
{
scanf("%d",&(p->a[i]));
}
p->b=X;
}
void output(pmp p)//输出顺序表
{
for(int i=0;i<X;i++)
{
printf("%d\t",p->a[i]);
}
putchar(10);
}
void jdpx(pmp p,int flag)//简单排序
{
if(flag==1)//降序排序
{
for(int i=0;i<X;i++)
{
int t=X-i-1;
for(int j=0;j<X-i-2;j++)
{
if(p->a[t]>p->a[j])
{
t=j;
}
}
int s=p->a[t];
p->a[t]=p->a[X-i-1];
p->a[X-i-1]=s;
}
}
if(flag==0)//升序排序
{
for(int i=0;i<X;i++)
{
int t=X-i-1;
for(int j=0;j<X-i-2;j++)
{
if(p->a[t]<p->a[j])
{
t=j;
}
}
int s=p->a[t];
p->a[t]=p->a[X-i-1];
p->a[X-i-1]=s;
}
}
}
jdpx.h
#ifndef __JDPX_H__
#define __JDPX_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define X 5
typedef struct l
{
int a[X];
int b;
}mp,*pmp;
pmp list_creat();//创建顺序表
void input(pmp p);//输入顺序表
void output(pmp p);//输出顺序表
void jdpx(pmp p,int flag);//简单排序
#endif