C语言题目:插入后自动排序(掌握用穷举法进行比较、交换)把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.要求:用数据指针.请写细致 我使用DEV C++6.0 由
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 20:49:11
C语言题目:插入后自动排序(掌握用穷举法进行比较、交换)把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.要求:用数据指针.请写细致 我使用DEV C++6.0 由
C语言题目:插入后自动排序(掌握用穷举法进行比较、交换)
把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.
要求:用数据指针.
请写细致
我使用DEV C++6.0
由小到大的数列最好是手动输入后排序的
C语言题目:插入后自动排序(掌握用穷举法进行比较、交换)把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.要求:用数据指针.请写细致 我使用DEV C++6.0 由
输入 1 4 3 8 9 2
输出 1 2 3 4 8 9
可以接受输入,但是写死了只能输入6个数字
下面是代码:
#include <stdio.h>
#include <stdlib.h>
/*
把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.
要求:用数据指针.
*/
typedef struct _List {
\x09int value;
\x09struct _List *next;
} List;
void insertList( List ** l ,int v)
{
\x09if( *l==NULL)/*输入链表为空*/
\x09{
\x09\x09*l = malloc(sizeof(List));
\x09\x09memset(*l,0,sizeof(List) );
\x09\x09(*l)->value = v;
\x09}
\x09else
\x09{
\x09\x09List *tmp=*l,*next,*p,*prev=NULL;
\x09\x09while(tmp)
\x09\x09{
\x09\x09\x09next = tmp->next;
\x09\x09\x09if( (!next && tmp->value < v ) || (next && tmp->value<v && next->value > v ) )/*输入值需要插入到当前遍历节点之后*/
\x09\x09\x09{
\x09\x09\x09\x09p= malloc(sizeof(List));
\x09\x09\x09\x09memset(p,0,sizeof(List) );
\x09\x09\x09\x09p->value = v;
\x09\x09\x09\x09tmp->next = p;
\x09\x09\x09\x09p->next = next;
\x09\x09\x09\x09return;
\x09\x09\x09}
\x09\x09\x09else if (tmp->value>v )/*输入值需要插入到当前遍历节点之前*/
\x09\x09\x09{
\x09\x09\x09\x09p= malloc(sizeof(List));
\x09\x09\x09\x09memset(p,0,sizeof(List) );
\x09\x09\x09\x09p->value = v;
\x09\x09\x09\x09if(!prev)
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09p->next = tmp;
\x09\x09\x09\x09\x09*l = p;
\x09\x09\x09\x09\x09return;
\x09\x09\x09\x09}
\x09\x09\x09\x09else
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09prev->next = p;
\x09\x09\x09\x09\x09p->next = tmp;
\x09\x09\x09\x09\x09return;
\x09\x09\x09\x09}
\x09\x09\x09}
\x09\x09\x09else
\x09\x09\x09{
\x09\x09\x09\x09prev = tmp;
\x09\x09\x09\x09tmp = next;
\x09\x09\x09}
\x09\x09}
\x09}
\x09return;
}
int main()
{
\x09int input [6] ;
\x09/*1 4 3 8 9 2*/
\x09List * l = NULL,*tmp;
\x09int i;
INPUT:\x09printf("pls input 6 number:");
\x09i = scanf("%d %d %d %d %d %d",input,input+1,input+2,input+3,input+4,input+5);
\x09if(i!=6)
\x09\x09goto INPUT;
\x09
\x09for(i=0;i<6;++i)
\x09\x09insertList(&l,input[i]);
\x09\x09
\x09tmp = l;
\x09while(tmp)
\x09{
\x09\x09printf("%d ",tmp->value);
\x09\x09tmp = tmp->next;
\x09}
\x09printf("\n");
\x09return 0;
}