c语言用链表存储数组 并排序,根据数组中给定的整数序列建立一个单链表,并对单链表进行升序排序,输出排序之后的单链表 求源代码急急急...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

mlujasd44

2013.10.11

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:45%    等级:12

已帮助:4423人

以下程序把代码的前面数字去掉就可以

4 #include

5 #include

6 typedef struct node //节点声明

7 {

8 int Data;

9 struct node* Next;

10 }Node;

11

12 typedef Node* PNode; //将节点Node* 用PNode代替

13

14 typedef struct //链表LinkList的定义

15 {

16 PNode Head;

17 PNode Tail;

18 int Size;

19 }LinkList;

3 void CreateList(LinkList *ls) //链表初始化

4 {

5 ls->Head = NULL;

6 ls->Tail = NULL;

7 ls->Size = 0;

8 }

10 int AppendNode(LinkList *ls, int Data) //增加链表节点

11 {

12 PNode newnode;

13 newnode = (PNode)malloc(sizeof(Node));

14 newnode->Data = Data;

15 newnode->Next = NULL;

16 if(ls->Head == NULL)

17 {

18 ls->Head = newnode;

19 ls->Tail = newnode;

20 }

21 else

22 {

23 ls->Tail->Next = newnode;

24 ls->Tail = newnode;

25 }

26 ls->Size++;

27 }

30 void DestroyList(LinkList *ls) //释放链表

31 {

32 PNode tmpnode = ls->Head;

33 while(tmpnode)

34 {

35 tmpnode = tmpnode->Next;

36 free(ls->Head);

37 ls->Head = tmpnode;

38 }

39 ls->Head = NULL;

40 ls->Tail = NULL;

41 ls->Size = 0;

42 }

44 void PrintList(LinkList *ls) //打印链表

45 {

46 PNode tmpnode;

47 int i=0;

48 tmpnode = ls->Head;

49 printf("\t\t");

50 while(tmpnode != NULL)

51 {

52 if(i%5 == 0)

53 {

54 putchar('\n');

55 printf("\t\t");

56 }

57 printf("\t%-d",tmpnode->Data);

58 tmpnode = tmpnode->Next;

59 i++;

60 }

61 putchar('\n');

62 }

140 int SortNode(LinkList *ls) //根据节点中的数据Data,升序排序

141 {

142 PNode tmpnode,endnode,newnode;

143 int tmp;

144 endnode = ls->Tail;

145 while(endnode != ls->Head)

146 {

147 tmpnode = ls->Head;

148 while(tmpnode != endnode)

149 {

150 if(tmpnode->Data > tmpnode->Next->Data)

151 {

152 tmp = tmpnode->Data;

153 tmpnode->Data = tmpnode->Next->Data;

154 tmpnode->Next->Data = tmp;

155 }

156 newnode = tmpnode;

157 tmpnode = tmpnode->Next;

158 }

159 endnode = newnode;

160 }

161 return 0;

162 }

2 int main() //主函数

3 {

4 LinkList ls;

5 int i,n,k,p;

6 CreateList(&ls);

7 srand(time(NULL)); //产生随机数的种子

8 for(i=0;i<20;i++)

9 {

10 AppendNode(&ls,rand()%100); //生成节点,节点的Data数据为0~99的随机数

11 }

12 printf("输出一个随机链表:\n");

13 PrintList(&ls);

14 putchar('\n');

30 printf("经过排序后的链表为:\n");

31 SortNode(&ls);

32 PrintList(&ls);

36 DestroyList(&ls);

37 }

00分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值