數據結構面試彙總

stackhtml

堆棧的所有功能,——也就是說實現了一個先進後出(FILO)的數據結構ios

操做 比較和分配堆棧算法

棧的應用——括號匹配問題數據結構

empty() 堆棧爲空則返回真ui

pop() 移除棧頂元素spa

push() 在棧頂增長元素.net

size() 返回棧中元素數目設計

top() 返回棧頂元素3d

#include <iostream> htm

#include <stack> 

using namespace std; 

  

int main () 

  stack<int> mystack; 

  

  for (int i=0; i<5; ++i) mystack.push(i); 

  

  cout << "Popping out elements..."; 

  while (!mystack.empty()) 

  { 

     cout << " " << mystack.top(); 

     mystack.pop(); 

  } 

  cout << endl; 

  

  return 0; 

}

 

Queue

隊列(Queue)是一個數據集合,僅容許在列表的一端進行插入,另外一端進行刪除。

  進行插入的一端稱爲隊尾(rear),插入動做稱爲進隊或入隊

  進行刪除的一端稱爲隊頭(front),刪除動做稱爲出隊

隊列的性質:先進先出(First-in, First-out)

雙向隊列:隊列的兩端都容許進行進隊和出隊操做

queue 的基本操做有:
入隊,如例:q.push(x); 將x 接到隊列的末端。
出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最先被壓入隊列的元素。
訪問隊尾元素,如例:q.back(),即最後被壓入隊列的元素。
判斷隊列空,如例:q.empty(),當隊列空時,返回true。
訪問隊列中的元素個數,如例:q.size()

 

#include <cstdlib>

#include <iostream>

#include <queue>

using namespace std;

int main()

{

    int e,n,m;

    queue<int> q1;

    for(int i=0;i<10;i++)

       q1.push(i);

    if(!q1.empty())

    cout<<"dui lie  bu kong\n";

    n=q1.size();

    cout<<n<<endl;

    m=q1.back();

    cout<<m<<endl;

    for(int j=0;j<n;j++)

    {

       e=q1.front();

       cout<<e<<" ";

       q1.pop();

    }

    cout<<endl;

    if(q1.empty())

    cout<<"dui lie  bu kong\n";

    system("PAUSE");

    return 0;

}

 

List

Lists將元素按順序儲存在鏈表中. 與 向量(vectors)相比, 它容許快速的插入和刪除,可是隨機訪問卻比較慢

assign() 給list賦值 
back() 返回最後一個元素 
begin() 返回指向第一個元素的迭代器 
clear() 刪除全部元素 
empty() 若是list是空的則返回true 
end() 返回末尾的迭代器 
erase() 刪除一個元素 
front() 返回第一個元素 
get_allocator() 返回list的配置器 
insert() 插入一個元素到list中 
max_size() 返回list能容納的最大元素數量 
merge() 合併兩個list 
pop_back() 刪除最後一個元素 
pop_front() 刪除第一個元素 
push_back() 在list的末尾添加一個元素 
push_front() 在list的頭部添加一個元素 
rbegin() 返回指向第一個元素的逆向迭代器 
remove() 從list刪除元素 
remove_if() 按指定條件刪除元素 
rend() 指向list末尾的逆向迭代器 
resize() 改變list的大小 
reverse() 把list的元素倒轉 
size() 返回list中的元素個數 
sort() 給list排序 
splice() 合併兩個list 
swap() 交換兩個list 
unique() 刪除list中重複的元素

 

實例:

[cpp] view plaincopy

  1. #include <iostream>   
  2. #include <list>   
  3. #include <numeric>   
  4. #include <algorithm>   
  5. using namespace std;   
  6.   
  7. //建立一個list容器的實例LISTINT   
  8. typedef list<int> LISTINT;   
  9. //建立一個list容器的實例LISTCHAR   
  10. typedef list<int> LISTCHAR;   
  11.   
  12. void main()   
  13. {   
  14.     //用list容器處理整型數據    
  15.     //用LISTINT建立一個名爲listOne的list對象   
  16.     LISTINT listOne;   
  17.     //聲明i爲迭代器   
  18.     LISTINT::iterator i;   
  19.       
  20.     //從前面向listOne容器中添加數據   
  21.     listOne.push_front (2);   
  22.     listOne.push_front (1);   
  23.       
  24.     //從後面向listOne容器中添加數據   
  25.     listOne.push_back (3);   
  26.     listOne.push_back (4);   
  27.       
  28.     //從前向後顯示listOne中的數據   
  29.     cout<<"listOne.begin()--- listOne.end():"<<endl;   
  30.     for (i = listOne.begin(); i != listOne.end(); ++i)   
  31.         cout << *i << " ";   
  32.     cout << endl;   
  33.       
  34.     //從後向後顯示listOne中的數據   
  35.     LISTINT::reverse_iterator ir;   
  36.     cout<<"listOne.rbegin()---listOne.rend():"<<endl;   
  37.     for (ir =listOne.rbegin(); ir!=listOne.rend();ir++) {   
  38.         cout << *ir << " ";   
  39.     }   
  40.     cout << endl;   
  41.       
  42.     //使用STL的accumulate(累加)算法   
  43.     int result = accumulate(listOne.begin(), listOne.end(),0);   
  44.     cout<<"Sum="<<result<<endl;   
  45.     cout<<"------------------"<<endl;   
  46.       
  47.     //--------------------------   
  48.     //用list容器處理字符型數據   
  49.     //--------------------------   
  50.       
  51.     //用LISTCHAR建立一個名爲listOne的list對象   
  52.     LISTCHAR listTwo;   
  53.     //聲明i爲迭代器   
  54.     LISTCHAR::iterator j;   
  55.       
  56.     //從前面向listTwo容器中添加數據   
  57.     listTwo.push_front ('A');   
  58.     listTwo.push_front ('B');   
  59.       
  60.     //從後面向listTwo容器中添加數據   
  61.     listTwo.push_back ('x');   
  62.     listTwo.push_back ('y');   
  63.       
  64.     //從前向後顯示listTwo中的數據   
  65.     cout<<"listTwo.begin()---listTwo.end():"<<endl;   
  66.     for (j = listTwo.begin(); j != listTwo.end(); ++j)   
  67.         cout << char(*j) << " ";   
  68.     cout << endl;   
  69.       
  70.     //使用STL的max_element算法求listTwo中的最大元素並顯示   
  71.     j=max_element(listTwo.begin(),listTwo.end());   
  72.     cout << "The maximum element in listTwo is: "<<char(*j)<<endl;   
  73. }   

單鏈表的基本操做

http://www.javashuo.com/article/p-hayqhset-ga.html

 

排序

 

 

 

 

冒泡

function bubbleSort(arr) {

    var len = arr.length;

    for (var i = 0; i < len - 1; i++) {

        for (var j = 0; j < len - 1 - i; j++) {

            if (arr[j] > arr[j+1]) {       // 相鄰元素兩兩對比

                var temp = arr[j+1];       // 元素交換

                arr[j+1] = arr[j];

                arr[j] = temp;

            }

        }

    }

    return arr;

}

 

快排

void Qsort(int a[], int low, int high)

{

    if(low >= high)

    {

        return;

    }

    int first = low;

    int last = high;

    int key = a[first];/*用字表的第一個記錄做爲樞軸*/

 

    while(first < last)

    {

        while(first < last && a[last] >= key)

        {

            --last;

        }

 

        a[first] = a[last];/*將比第一個小的移到低端*/

 

        while(first < last && a[first] <= key)

        {

            ++first;

        }

         

        a[last] = a[first];    

/*將比第一個大的移到高端*/

    }

    a[first] = key;/*樞軸記錄到位*/

    Qsort(a, low, first-1);

    Qsort(a, first+1, high);

}

 

冒泡

它重複地走訪過要排序的數列,一次比較兩個元素,若是它們的順序錯誤就把它們交換過來。

選擇

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而後,再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾

插入

構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。

希爾

優先比較距離較遠的元素

歸併

將已有序的子序列合併,獲得徹底有序的序列

快排

經過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分的關鍵字小

堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆積是一個近似徹底二叉樹的結構,並同時知足堆積的性質:即子結點的鍵值或索引老是小於(或者大於)它的父節點。

相關文章
相關標籤/搜索