程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 鏈表的插入 刪除 排序 倒敘

鏈表的插入 刪除 排序 倒敘

編輯:C++入門知識

[cpp] view plaincopy
#include <iostream> 
using namespace std; 
#include <stdio.h> 
#include <stdexcept> 
#include <conio.h> 
#include <string.h> 
#include <stack> 
 
 
struct Node 

    int data; 
    struct Node *next; 
}; 
 
Node *Creat() 

    Node *head,*p,*s; 
    head=(Node *)malloc(sizeof(Node)); 
    p=head; 
    int n; 
    while(scanf("%d",&n)&&n) 
    { 
        s=(Node *)malloc(sizeof(Node)); 
        s->data=n; 
        p->next=s; 
        p=s; 
    } 
    head=head->next; 
    p->next=NULL; 
    return head; 

 
int Length(Node *head) 

    Node *p; 
    p=head; 
    int len=0; 
    while(NULL!=p) 
    { 
        p=p->next; 
        ++len; 
    }    
    return len; 

 
Node *Del(Node *&head,int num) 

    Node *p1,*p2; 
    p1=head; 
    while (num!=p1->data&&NULL!=p1->next) 
    { 
        p2=p1; 
        p1=p1->next; 
    } 
    if (num==p1->data) 
    { 
        if(p1==head) 
        { 
            head=p1->next; 
            free(p1); 
        } 
        else 
        { 
            p2->next=p1->next; 
        } 
    } 
    else 
    { 
        printf("%d cound not be found\n",num); 
    } 
    return head; 

//插入頭結點時,這是頭結點改變了,所以這裡要注意  就是所謂的引用與指針的區別 
//函數體內 要修改一個變量的值該怎麼做呢???不懂的自己百度 
//這種情況老是容易忘記,請仔細注意了 
Node *Insert(Node *&head,int num) 

    Node *p0,*p1,*p2; 
    p1=head; 
    p0=(Node*)malloc(sizeof(Node)); 
    p0->data=num; 
    while (num>p1->data&&NULL!=p1->next) 
    { 
        p2=p1; 
        p1=p1->next; 
    } 
    if (num<=p1->data) 
    { 
        if (head==p1) 
        { 
            p0->next=head; 
            head=p0; 
        } 
        else 
        { 
            p2->next=p0; 
            p0->next=p1; 
        } 
    } 
    else 
    { 
        p1->next=p0; 
        p1->next->next=NULL; 
    } 
    return head; 

 
 
Node *Sorted(Node *head)//簡單的冒泡排序法 

    Node *p1,*p2; 
    p1=head; 
    p2=head; 
    int len=Length(head); 
    if (NULL==head||NULL==head->next) 
        return head; 
    for (int i=0; i<len; ++i) 
    { 
        p2=p1; 
        for (int j=i+1; j<len; ++j) 
        { 
            if(p1->data>p2->next->data) 
            { 
                p1->data^=p2->next->data; 
                p2->next->data^=p1->data; 
                p1->data^=p2->next->data; 
            } 
            p2=p2->next; 
        } 
        p1=p1->next; 
    } 
    return head; 

 
 
Node *Reverse(Node *&head) 

    Node *p1,*p2,*p3; 
    p1=head; 
    if (NULL==head||NULL==head->next) 
    { 
        return head;  
    } 
    p2=p1->next; 
    while (p2) 
    { 
        p3=p2->next; 
        p2->next=p1; 
        p1=p2; 
        p2=p3; 
    } 
    head->next=NULL; 
    head=p1; 
    return head; 

 
 
void Print(Node *head) 

    Node *p; 
    p=head; 
    while (NULL!=p) 
    { 
        printf("%d ",p->data); 
        p=p->next; 
    } 
    printf("\n"); 

[cpp] 
  
[cpp] 
<pre class="cpp" name="code">#include "list.h" 
 
int main() 

    Node *head; 
    int del_num,insert_num; 
    head=Creat(); 
    Print(head); 
    cout<<"\n\n"; 
    cout<<"鏈表的長度: "<<Length(head)<<"\n\n"; 
        cin>>del_num; 
        Del(head,del_num); 
        cout<<"刪除後的鏈表: "; 
        Print(head); 
 
        while(cin>>insert_num&&insert_num) 
        { 
                cout<<"插入後的鏈表: "; 
                Insert(head,insert_num); 
                Print(head); 
        } 
     
        Reverse(head); 
        cout<<"倒序輸出:"; 
        Print(head); 
                 
     
        Sorted(head); 
        cout<<"排序後的鏈表: "; 
        Print(head); 
     
    system("pause"); 
 
    return 0; 
}</pre><br> 
<pre></pre> 
<br> 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved