[用C语言实现链表的算法]这个是我们数据结构上机实验的链表问题, #include<stdio.h> #include<malloc.h> #define LEN sizeof(LinkNode) typedef int Datatype; typedef int Status; typedef struct...+阅读
从键盘输入不定数量的数字构造链表,输入0结束,然后排序输出,代码如下:
#include
#include
#include
typedef struct _list {
int val;
struct _list* next;
} *node, list;
/* 插入节点 */
node Insert( node* head, node pos, int val )
{
node tmp;
tmp = ( node )malloc( sizeof( list ) );
tmp->val = val;
tmp->next = pos ? pos->next : *head;
if ( pos ) {
pos->next = tmp;
} else {
*head = tmp;
}
return tmp;
}
/* 构造链表 */
node Create( void )
{
node head, t;
int n;
head = t = NULL;
while ( scanf( "%d", &n ) && n != 0 ) {
t = Insert( &head, t, n );
}
return head;
}
/* 输出 */
void Print( node head )
{
while ( head ) {
printf( "%d ", head->val );
head = head->next;
}
putchar( '\n' );
}
/* 排序 */
node msort( node* head, int n )
{
int i, m;
node l, r, p, *x, *y;
if ( n < 2 ) return *head;
m = n/2;
p = l = r = *head;
for ( i = m; i > 0; --i )
p = r, r = r->next;
p->next = NULL;
l = msort( &l, m );
r = msort( &r, n - m );
x = &p;
while ( l && r ) {
*x = l->val < r->val ? (y = &l, l) : (y = &r, r);
*y = (*y)->next; x = &(*x)->next;
}
l = l ? l : r ? r : NULL;
*x = l; *head = p;
return p;
}
/* 包装函数 */
void Sort( node* head )
{
int i;
node tmp = *head;
for ( i = 0; tmp; ++i, tmp = tmp->next );
msort( head, i );
}
int main( void )
{
node head = Create();
Print( head );
Sort( &head );
Print( head );
getch();
return 0;
}
望采纳
以下为关联文档:
用C语言实现数据结构中常用算法如对链表的操作查找排序等#include <iostream.h> class ram { public: char wenzi[200]; ram *p; }; ram wo,*ai=&wo; int num=0;//我申请了几次内存了 void xie(void);//输入数据,然后分配内存为下次做...
C语言怎么用二分查找插入排序一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 1. 从第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描 3....
你好请问一下怎么用C语言编写单链表插入节点程序万分感谢!#include "sll_node.h" #include #define FALSE 0 #define TRUE 1 // insertNode2:把newValue的值插入到递增排序的链表中,正确返回TRUE,错误返回FALSE // nextp是指向当前节点的...
C语言用函数排序#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int array[10]; int i,j,min,stmp; for(i=0;i<10;i++) scanf("%d",&array[i]); for(i=0;i<9;i+...
用C语言写一个快速排序法不要用库函数include<stdio.h> void main() { int a[]={8,4,24,1,54,87,113,39};//这里的元素可以手动输入,用for循环输入,先给定数组长度N //再一次输入数组元素 /* int n; scanf("&%d",n);...
帮忙做道C语言的题双向链表的排序#includetypedef struct Link/*双向链表结构体*/{ int data; struct Link *lift; struct Link *right;}linkx,*linky;linky Init();/*建立双向链表*/void PrLink(linky p);/*输...
求高手做个c语言设计一个双向链表的排序#includetypedef struct Link/*双向链表结构体*/ { int data; struct Link *lift; struct Link *right; }linkx,*linky; linky Init();/*建立双向链表*/ void PrLink(linky p)...
急!求c语言单链表冒泡排序的详细流程图#include struct number { int num; struct number *next; }; void main() { struct number *head; struct number *p1,*p2,*p,*p3,*p4; int n=0,m,i,j; p1=p2=(struct numb...
如何用c语言实现单链表的逆置1、算法的核心就是reverse函数,其它的都是辅助建立链表和输出链表的。从数据结构的定义来看这是一个带头节点的链表。要弄的十分明白要耐心点画图看看。 2、思路:head是指向头...