一个线性表中的元素为整数,设计一个算法,将正整数和负整数分开,使线性表的前一半为负整数,后一半为正整数。(C语言)


以下为完整可运行示例代码:

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 typedef struct LNode{
 4     int data;
 5     struct LNode *next;
 6 }LNode;
 7 LNode* creat(int n){
 8     LNode *Link;  
 9     LNode *p1,*p2;
10     int data;
11     Link=(LNode*)malloc(sizeof(LNode));
12     p2=Link;
13     for(int i=0;i<n;++i){  //一共n个数
14         scanf("%d",&data);
15         p1=(LNode*)malloc(sizeof(LNode));
16         p1->data=data;
17         p2->next=p1;
18         p2=p1;
19     }
20     p2->next=NULL;
21     return Link;
22 }
23 
24 LNode* separate(LNode *&A){
25     LNode *p1,*p2;  //指针p2是原始混合数链表的哨兵指针,把p2扫描到的负整数存到p1结点
26     LNode *p;        //p后连接p1结点
27     LNode *q1,*q2;  //把p2扫描到的正整数存到q1结点,已经存完负整数的p后再连接一个个q1结点
28     p=(LNode*)malloc(sizeof(LNode));
29     p2=A->next;
30     q2=A->next;//q2再重新扫描原始链表
31     while(p2!=NULL){
32         if(p2->data<0){
33             p1=(LNode*)malloc(sizeof(LNode));
34             p1->data=p2->data;
35             p->next=p1;
36             p=p1;
37             p2=p2->next;  //p2继续向后扫描
38             printf("%d",p->data);
39             printf(" ");
40         }
41         else
42             p2=p2->next;
43     }
44     while(q2!=NULL){
45         if(q2->data>0){
46             q1=(LNode*)malloc(sizeof(LNode));
47             q1->data=q2->data;
48             p->next=q1;
49             p=q1;
50             q2=q2->next;
51             printf("%d",p->data);
52             printf(" ");
53         }
54         else
55             q2=q2->next;
56     }
57     printf("\n");
58     return A;
59 }
60 void print(LNode *Link){
61     LNode *p;
62     p=Link->next;
63     while(p!=NULL){    
64         printf("%d",p->data);
65         printf(" ");
66         p=p->next;
67     }
68     printf("\n");
69 }
70 
71 int main(){
72     LNode *Link=NULL;
73     int num;
74     printf("共创建几个链表结点:");
75     scanf("%d",&num);
76     printf("请输入链表结点:\n");
77     Link=creat(num);
78     printf("已创建好的链表结点:");
79     print(Link);
80     separate(Link);
81     return 0;
82 }

 

 

 

运行结果如下:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM