日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

面試中經(jīng)常讓寫的關(guān)于鏈表的代碼

 ONLY_影 2015-03-03

還有一個月,各個公司都會開始秋季招聘了,作為即將成為一個被面試的人,說實話,我很緊張也很激動,緊張的原因是我沒有進(jìn)行過技術(shù)面試,激動的原因是要看看這大學(xué)三年我到底學(xué)的怎么樣,到底哪些個公司會要我。而與此同時,學(xué)校還在進(jìn)行著每年一度的課程很多的小學(xué)期,耽誤著大家出去實習(xí),耽誤著大家準(zhǔn)備找工作的時間,不知道學(xué)院的領(lǐng)導(dǎo)們到底是怎么想的。。

今天上午,把以前寫過的關(guān)于鏈表的代碼重新練習(xí)了一下,不全,只是一些常見的,包括:建立鏈表的相關(guān)操作,求鏈表的長度,對鏈表實現(xiàn)冒泡排序,完成單鏈表的逆序和逆序輸出,合并兩個已經(jīng)排好序的鏈表。

下面是代碼:

復(fù)制代碼
  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 struct Node
  6 {
  7 public:
  8     int data;
  9     Node *next;
 10     Node(){};
 11     Node(int i)
 12     {
 13         data = i;
 14         next = NULL;
 15     }
 16 };
 17 class List
 18 {
 19 public:
 20     Node *head;
 21     Node *curr;
 22     List()
 23     {
 24         head = NULL;
 25         curr = NULL;
 26     }
 27     void insert_from_tail(Node *tmp)
 28     {
 29         if(head == NULL)
 30         {
 31             head = new Node();
 32             head->next = tmp;
 33             curr = tmp;
 34         }
 35         else
 36         {
 37             curr->next = tmp;
 38             curr = tmp;
 39         }
 40     }
 41     int length()const
 42     {
 43         int count = 0;
 44         Node *tmp = head->next;
 45         while(tmp != NULL)
 46         {
 47             tmp = tmp->next;
 48             count++;
 49         }
 50         return count;
 51     }
 52 };
 53 //完成兩個節(jié)點(diǎn)的值的交換
 54 void Swap(Node *t1,Node *t2)
 55 {
 56     int tmp = t1->data;
 57     t1->data = t2->data;
 58     t2->data = tmp;
 59 }
 60 //冒泡排序
 61 void bubble_sort(List &l)
 62 {        
 63     int len = l.length();
 64     for(int i = len-1 ; i > 0 ; --i)
 65     {
 66         Node *tmp = l.head->next;
 67         for(int j = 0 ; j < i ; ++j)
 68         {
 69             if(tmp->data > tmp->next->data)
 70             {
 71                 Swap(tmp,tmp->next);
 72             }
 73             tmp = tmp->next;
 74         }
 75     }
 76 }
 77 //完成單鏈表的逆序并輸出
 78 void reverse_print(List &l)
 79 {
 80     if(l.head == NULL || l.head->next == NULL)//鏈表是空
 81     {
 82         return ;
 83     }
 84     Node *p1 = l.head->next;
 85     Node *p2 = l.head->next->next;
 86     p1->next = NULL;//這里一定要讓p1->next = NULL,因為逆序后p1實際上是鏈表的最后一個節(jié)點(diǎn)
 87     while(p2 != NULL)
 88     {
 89         Node *tmp = p2->next;
 90         p2->next = p1;    
 91         p1 = p2;
 92         p2 = tmp;
 93     }
 94     l.head->next = p1;//注意這里第一個節(jié)點(diǎn)是p1,而不是p2
 95     Node *p = l.head->next;
 96     while(p != NULL)
 97     {
 98         cout<<p->data<<" ";
 99         p = p->next;
100     }
101     cout<<endl;
102 }
103 //合并兩個單鏈表
104 void merge(List l1 ,List l2 ,List &l3)
105 {
106     Node *p1 = l1.head->next;
107     Node *p2 = l2.head->next;
108     while(p1 != NULL || p2 != NULL)
109     {
110         if(p2 == NULL || (p1 != NULL && p1->data <= p2->data))
111         {
112             l3.insert_from_tail(p1);
113             p1= p1->next;
114         }
115         else
116         {
117             l3.insert_from_tail(p2);
118             p2 = p2->next;
119         }
120     }
121 }
122 int main()
123 {
124     /*---------------------------------------*/
125     //初始化單鏈表
126     int i;
127     Node *p;
128     List l;
129     Node t[5] = {2,1,4,3,0};
130     for(i = 0 ; i < 5 ; ++i)
131     {
132         l.insert_from_tail(&t[i]);    
133     }
134     //單鏈表的長度
135     cout<<"初始化單鏈表的長度是:";
136     cout<<l.length()<<endl;
137     cout<<"初始化鏈表中的數(shù)據(jù)是:";
138     p = l.head->next;
139     while(p != NULL)
140     {
141         cout<<p->data<<" ";
142         p = p->next;
143     }
144     cout<<endl;
145 
146     /*----------------------------------------*/
147     //排序后的結(jié)果
148     bubble_sort(l);
149     cout<<"排序后鏈表中的數(shù)據(jù)是:";
150     p = l.head->next;
151     while(p != NULL)
152     {
153         cout<<p->data<<" ";
154         p = p->next;
155     }
156     cout<<endl;
157     /*----------------------------------------*/
158     //逆序單鏈表
159     cout<<"逆序后鏈表中的數(shù)據(jù)是:";
160     reverse_print(l);
161     /*----------------------------------------*/
162     //合并兩個拍好序的單鏈表
163     List l1,l2,l3;
164     Node t1[4] = {1,3,4,5};
165     Node t2[4] = {2,6,7,8};
166     for(i = 0 ; i < 4 ; ++i)
167     {
168         l1.insert_from_tail(&t1[i]);
169         l2.insert_from_tail(&t2[i]);
170     }
171     cout<<"{1,3,4,5}和{2,6,7,8}合并后的鏈表中的數(shù)據(jù):";
172     merge(l1,l2,l3);
173     p = l3.head->next;
174     while(p != NULL)
175     {
176         cout<<p->data<<" ";
177         p = p->next;
178     }
179     cout<<endl;
180     return 0;
181 }
復(fù)制代碼

前一段時間問過一個去了人人網(wǎng)C++部門的師哥,說想去大公司的話,代碼能力必須過關(guān)哦~~~~

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多