永发信息网

用C语言建立一个链表实现一个通讯录,

答案:1  悬赏:80  手机版
解决时间 2021-07-26 22:27

用C语言建立一个链表实现一个通讯录,

要求包含姓名,地址,家庭电话号码,QQ号码。开辟48个空间就可以了。

要求输出是根据QQ号码从小到大输出 。

只要求录入和输出

最佳答案
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

typedef unsigned long ulong;

typedef struct _list {
char name[16];
char addr[64];
ulong phone;
ulong qq;
struct _list* next;
} *node, list;


node Insert( node* head, node pos, list* l )
{
node tmp;
tmp = ( node )malloc( sizeof( list ) );
strcpy( tmp->name, l->name );
strcpy( tmp->addr, l->addr );
tmp->phone = l->phone;
tmp->qq = l->qq;
tmp->next = pos ? pos->next : *head;
if ( pos ) {
pos->next = tmp;
} else {
*head = tmp;
}
return tmp;
}


node Create( void )
{
node head, t;
list input;
head = t = NULL;
printf( "请按 [姓名] [地址] [家庭电话] [qq] 的顺序输入\n" );
printf( "每行一组数据,输入空行结束:\n" );
while ( 1 ) {
if ( getchar() == '\n' ) break;
scanf( "%s%s%lu%lu", input.name, input.addr, &input.phone, &input.qq );
while ( getchar() != '\n' );
t = Insert( &head, t, &input );
}
return head;
}



void Print( node head )
{
while ( head ) {
printf( "%s\t%s\t%lu\t%lu\n", head->name, head->addr, head->phone, head->qq );
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->qq < r->qq ? (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();
printf( "\n链表内容:\n" );
Print( head );
Sort( &head );
printf( "\n排序之后:\n" );
Print( head );
getch();
return 0;
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
2+3的天平宝宝要怎么最快合到3+10
用凡写一篇作文
一个耳洞打偏了怎么办,耳洞打偏了,怎么办?
诱舞坊5号 慢嗨DJ舞曲名字是 什麼 啊?
DNF买一个50级的武器罐子多少钱,衣服罐子又
IRIS里出现 8eight 的没有心脏 唱的那女的是
死神动画为什么到100集后直接到了150中间哪去
巨龙变全书那里下载?
不知道叫什么好?
宣读是什么意思,赵本宣读是什么意思
1989年11月初7是什么星座?
谁的宠物猪生孩子了?给我一只
易初莲花超市有卖软件没
什么韩国鬼故事吓人一点的?
数学的来历30字
推荐资讯
道的偏旁和什么有关,礻的偏旁是什么意思
09145期超级大乐透中奖号码
孩子,蓝天,周末.组成有意义的话.
梦幻诛仙里怎么建队伍
怎样将QQ昵称文字改为火星文
兴业县250cc摩托跑车能上牌吗
请运用矛盾的观点,谈谈你对加强节能减排工作
仿照“玫瑰紫”,“苹果绿”,“柠檬黄”的构词
为什么许多灭绝动物只有这二种动物永远不灭绝
古诗词教学情境,如何在古诗教学中创设情境
庆祝佳人生日的古诗词,急解释文言文!深冬渐
心里很想一个人怎么办,心里很想一个人的时候
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?