一個線性表中的元素為整數,設計一個算法,將正整數和負整數分開,使線性表的前一半為負整數,后一半為正整數。(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