最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++數(shù)組模擬之單鏈表與雙鏈表和棧和隊(duì)列的實(shí)現(xiàn)過程

 更新時(shí)間:2023年02月13日 10:02:15   作者:Ggggggtm  
這篇文章主要介紹了C++數(shù)組模擬之單鏈表與雙鏈表和棧和隊(duì)列的實(shí)現(xiàn)過程,了解內(nèi)部原理是為了幫助我們做擴(kuò)展,同時(shí)也是驗(yàn)證了一個(gè)人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會(huì)的,跟隨下文來具體了解吧

前引

我們在數(shù)據(jù)結(jié)構(gòu)中都學(xué)到過單鏈表、雙鏈表、棧和隊(duì)列,當(dāng)我們實(shí)現(xiàn)的時(shí)候時(shí)使用結(jié)構(gòu)體指針實(shí)現(xiàn)的。定義一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體中存儲(chǔ)指針變量和存放數(shù)值的變量。當(dāng)然,C++的STL庫中已經(jīng)有實(shí)現(xiàn)好的棧和隊(duì)列,我們可以直接用。但是在做算法題時(shí),有時(shí)候我們會(huì)發(fā)現(xiàn)超出時(shí)間限制。原因是我們用STL庫中的棧和隊(duì)列容器時(shí),效率相對(duì)來說較慢。我們這時(shí)就引出用數(shù)組模擬實(shí)現(xiàn)棧和隊(duì)列。用數(shù)組模擬實(shí)現(xiàn)的使用起來效率更高、更方便。當(dāng)然,我們也會(huì)講到用數(shù)組模擬實(shí)現(xiàn)單鏈表和雙鏈表。

一、數(shù)組模擬實(shí)現(xiàn)單鏈表

1.1 數(shù)組模擬的單鏈表解析

用結(jié)構(gòu)體實(shí)現(xiàn)單鏈表時(shí),我們會(huì)在結(jié)構(gòu)體中定義一個(gè)存放數(shù)據(jù)的變量和一個(gè)存放下一個(gè)數(shù)據(jù)地址的指針。那我們用數(shù)組模擬實(shí)現(xiàn)怎么找到下一個(gè)數(shù)據(jù)的呢?用數(shù)組實(shí)現(xiàn)單鏈表,我們定義兩個(gè)數(shù)組即可。一個(gè)數(shù)組存放數(shù)據(jù),另一個(gè)數(shù)組存放下一數(shù)據(jù)的下標(biāo)(充當(dāng)結(jié)構(gòu)體中的指針)。我們之直節(jié)看代碼,理解更加容易。

//e[i] 表示點(diǎn)i的值
//ne[i] 表示節(jié)點(diǎn)i的下一個(gè)數(shù)據(jù)的下標(biāo)
//head 表示棧頭下標(biāo)
//idx 當(dāng)前已經(jīng)存儲(chǔ)到第幾個(gè)數(shù)據(jù)了
int head,e[N],ne[N],idx;
//初始化
void Init()
{
    head=-1;
    idx=0;
}
//頭插
void InsertHead(int x)
{
    e[idx]=x;
    ne[idx]=head;
    head=idx;
    idx++;
}
//在地k個(gè)節(jié)點(diǎn)后插入一個(gè)元素
 
void Insert(int k,int x)
{
    e[idx]=x;
    ne[idx]=ne[k];
    ne[k]=idx;
    idx++;
}
//刪除第k個(gè)節(jié)點(diǎn)
void remove(int k)
{
    ne[k]=ne[ne[k]];
}

我們再結(jié)合著一個(gè)例題看一下。

1.2 數(shù)組模擬實(shí)現(xiàn)單鏈表例題

實(shí)現(xiàn)一個(gè)單鏈表,鏈表初始為空,支持三種操作:

  • 向鏈表頭插入一個(gè)數(shù);
  • 刪除第kk個(gè)插入的數(shù)后面的數(shù);
  • 在第kk個(gè)插入的數(shù)后插入一個(gè)數(shù)。

現(xiàn)在要對(duì)該鏈表進(jìn)行MM次操作,進(jìn)行完所有操作后,從頭到尾輸出整個(gè)鏈表。

注意:題目中第kk個(gè)插入的數(shù)并不是指當(dāng)前鏈表的第kk個(gè)數(shù)。例如操作過程中一共插入了nn個(gè)數(shù),則按照插入的時(shí)間順序,這nn個(gè)數(shù)依次為:第11個(gè)插入的數(shù),第22個(gè)插入的數(shù),…第nn個(gè)插入的數(shù)。

輸入格式:

第一行包含整數(shù)MM,表示操作次數(shù)。

接下來MM行,每行包含一個(gè)操作命令,操作命令可能為以下幾種:

H x,表示向鏈表頭插入一個(gè)數(shù)xx。

D k,表示刪除第kk個(gè)插入的數(shù)后面的數(shù)(當(dāng)kk為00時(shí),表示刪除頭結(jié)點(diǎn))。

I k x,表示在第kk個(gè)插入的數(shù)后面再插入一個(gè)數(shù)xx(此操作中kk均大于00)。

輸出格式:

共一行,將整個(gè)鏈表從頭到尾輸出。

數(shù)據(jù)范圍:

1≤M≤1000001≤M≤100000

所有操作保證合法。

輸入樣例:

10
H 9
I 1 1
D 1
D 0
H 6
I 3 6
I 4 5
I 4 5
I 3 4
D 6

輸出樣例:

6 4 6 5

我們看一下這道題的答案,代碼如下:

#include<iostream>
using namespace std;
const int N=100010;
//e[i] 表示點(diǎn)i的值
//ne[i] 表示節(jié)點(diǎn)i的下一個(gè)數(shù)據(jù)的下標(biāo)
//head 表示棧頭下標(biāo)
//idx 當(dāng)前已經(jīng)存儲(chǔ)到第幾個(gè)數(shù)據(jù)了
int head,e[N],ne[N],idx;
//初始化
void Init()
{
    head=-1;
    idx=0;
}
//頭插
void InsertHead(int x)
{
    e[idx]=x;
    ne[idx]=head;
    head=idx;
    idx++;
}
//在地k個(gè)節(jié)點(diǎn)后插入一個(gè)元素
void Insert(int k,int x)
{
    e[idx]=x;
    ne[idx]=ne[k];
    ne[k]=idx;
    idx++;
}
//刪除第k個(gè)節(jié)點(diǎn)
void remove(int k)
{
    ne[k]=ne[ne[k]];
}
int main()
{
    int m;
    cin>>m;
    Init();
    while(m--)
    {
        char op;
        cin>>op;
        if(op=='H')
        {
            int x;
            cin>>x;
            InsertHead(x);
        }
        else if(op=='D')
        {
            int k;
            cin>>k;
            if(!k)
                head=ne[head];
            else
                remove(k-1);
        }
        else
        {
            int k,x;
            cin>>k>>x;
            Insert(k-1,x);
        }
    }
    for(int i=head;i!=-1;i=ne[i])
    {
        printf("%d ",e[i]);
    }
}

二、數(shù)組模擬實(shí)現(xiàn)雙鏈表

2.1 數(shù)組模擬實(shí)現(xiàn)雙鏈表解析

數(shù)組模擬實(shí)現(xiàn)雙鏈表與數(shù)組模擬實(shí)現(xiàn)單鏈表大同小異。數(shù)組模擬實(shí)現(xiàn)雙鏈表時(shí)我們需要定義三個(gè)數(shù)組,一個(gè)數(shù)組存放數(shù)據(jù),一個(gè)數(shù)組存放該數(shù)據(jù)左邊數(shù)據(jù)的下標(biāo)(左指針),一個(gè)數(shù)組存放該數(shù)據(jù)右邊數(shù)據(jù)的下標(biāo)(右指針)。我們直接看代碼:

//e[i] 是表示點(diǎn)i的值
//l[i] 表示節(jié)點(diǎn)i的左邊指針是多少
//r[i] 表示節(jié)點(diǎn)i的右邊指針是多少
//idx 存儲(chǔ)當(dāng)前已經(jīng)用到那個(gè)點(diǎn)了
int e[N],l[N],r[N],idx;
//初始化
void Init()
{
    r[0]=1;
    l[1]=0;
    idx=2;
}
//在下標(biāo)為k的右邊插入一個(gè)元素
void Insert(int k,int x)
{
    e[idx]=x;
    r[idx]=r[k];
    l[idx]=k;
    l[r[k]]=idx;
    r[k]=idx;
    idx++;
}
//刪除下標(biāo)為k的元素
void remove(int k)
{
    r[l[k]]=r[k];
    l[r[k]]=l[k];
}

我們發(fā)現(xiàn),上面代碼并沒有定義在下標(biāo)為k的左邊插入一個(gè)數(shù)據(jù),我們只定義了在下標(biāo)為k的右邊插入一個(gè)數(shù)據(jù)。為什么呢?因?yàn)榭梢杂迷谙聵?biāo)為k的右邊插入一個(gè)數(shù)據(jù)函數(shù)實(shí)現(xiàn)在下標(biāo)為k的左邊插入一個(gè)數(shù)據(jù)。我們只需要在下標(biāo)為k的左邊的數(shù)據(jù)的右邊插入一個(gè)數(shù)據(jù)就相當(dāng)于實(shí)現(xiàn)了在下標(biāo)為k的左邊插入一個(gè)數(shù)據(jù)。如下圖,我們想在下標(biāo)為3的左邊插入一個(gè)數(shù)據(jù),其實(shí)就是在下標(biāo)為2的右邊插入一個(gè)數(shù)據(jù)。

我們結(jié)合著一個(gè)例題理解一下。

2.2 數(shù)組模擬實(shí)現(xiàn)雙鏈表例題

實(shí)現(xiàn)一個(gè)雙鏈表,雙鏈表初始為空,支持55種操作:

  • 在最左側(cè)插入一個(gè)數(shù);
  • 在最右側(cè)插入一個(gè)數(shù);
  • 將第kk個(gè)插入的數(shù)刪除;
  • 在第kk個(gè)插入的數(shù)左側(cè)插入一個(gè)數(shù);
  • 在第kk個(gè)插入的數(shù)右側(cè)插入一個(gè)數(shù)

現(xiàn)在要對(duì)該鏈表進(jìn)行MM次操作,進(jìn)行完所有操作后,從左到右輸出整個(gè)鏈表。

注意:題目中第kk個(gè)插入的數(shù)并不是指當(dāng)前鏈表的第kk個(gè)數(shù)。例如操作過程中一共插入了nn個(gè)數(shù),則按照插入的時(shí)間順序,這nn個(gè)數(shù)依次為:第11個(gè)插入的數(shù),第22個(gè)插入的數(shù),…第nn個(gè)插入的數(shù)。

輸入格式:

第一行包含整數(shù)MM,表示操作次數(shù)。

接下來MM行,每行包含一個(gè)操作命令,操作命令可能為以下幾種:

  • L x,表示在鏈表的最左端插入數(shù)xx。
  • R x,表示在鏈表的最右端插入數(shù)xx。
  • D k,表示將第kk個(gè)插入的數(shù)刪除。
  • IL k x,表示在第kk個(gè)插入的數(shù)左側(cè)插入一個(gè)數(shù)。
  • IR k x,表示在第kk個(gè)插入的數(shù)右側(cè)插入一個(gè)數(shù)。

輸出格式:

共一行,將整個(gè)鏈表從左到右輸出。

數(shù)據(jù)范圍:

1≤M≤1000001≤M≤100000

所有操作保證合法。

輸入樣例:

10
R 7
D 1
L 3
IL 2 10
D 3
IL 2 7
L 8
R 9
IL 4 7
IR 2 2

輸出樣例:

8 7 7 3 2 9

我們看一下答案,代碼如下:

#include<iostream>
using namespace std;
const int N=100010;
//e[i] 是表示點(diǎn)i的值
//l[i] 表示節(jié)點(diǎn)i的左邊指針是多少
//r[i] 表示節(jié)點(diǎn)i的右邊指針是多少
//idx 存儲(chǔ)當(dāng)前已經(jīng)用到那個(gè)點(diǎn)了
int e[N],l[N],r[N],idx;
//初始化
void Init()
{
    r[0]=1;
    l[1]=0;
    idx=2;
}
//在下標(biāo)為k的右邊插入一個(gè)元素
void Insert(int k,int x)
{
    e[idx]=x;
    r[idx]=r[k];
    l[idx]=k;
    l[r[k]]=idx;
    r[k]=idx;
    idx++;
}
//刪除下標(biāo)為k的元素
void remove(int k)
{
    r[l[k]]=r[k];
    l[r[k]]=l[k];
}
int main()
{
    int m;
    cin>>m;
    Init();
    while(m--)
    {
        string op;
        int x,k;
        cin>>op;
        if(op=="L")
        {
            cin>>x;
            Insert(0,x);
        }
        else if(op=="R")
        {
            cin>>x;
            Insert(l[1],x);
        }
        else if(op=="D")
        {
            cin>>k;
            remove(k+1);
        }
        else if(op=="IL")
        {
            cin>>k>>x;
            Insert(l[k+1],x);
        }
        else
        {
            cin>>k>>x;
            Insert(k+1,x);
        }
    }
    for (int i = r[0]; i != 1; i = r[i]) 
        cout << e[i] << ' ';
    return 0;
}

三、數(shù)組模擬實(shí)現(xiàn)棧

3.1 數(shù)組模擬實(shí)現(xiàn)棧解析

我們用數(shù)組模擬實(shí)現(xiàn)棧是相對(duì)簡單的。我們只要滿足棧的先進(jìn)后出的性質(zhì)即可。我們直接看代碼,如下:

//********************* 模擬棧
int stack[N],top=0;
//往棧中插入元素
stack[top++];
//拿出棧頂元素
top--;
//棧頂元素
stack[top-1];
//判斷棧是否為空
if(top>0)
{
    printf("notempty\n");
}
else
{
    printf("empty\n");
}

我們這里給出一個(gè)用到單調(diào)棧的例題。

3.2 數(shù)組模擬實(shí)現(xiàn)棧例題

給定一個(gè)長度為NN的整數(shù)數(shù)列,輸出每個(gè)數(shù)左邊第一個(gè)比它小的數(shù),如果不存在則輸出−1−1。

輸入格式:

第一行包含整數(shù)NN,表示數(shù)列長度。

第二行包含NN個(gè)整數(shù),表示整數(shù)數(shù)列。

輸出格式:

共一行,包含NN個(gè)整數(shù),其中第ii個(gè)數(shù)表示第ii個(gè)數(shù)的左邊第一個(gè)比它小的數(shù),如果不存在則輸出−1−1。

數(shù)據(jù)范圍:

1≤N≤1051≤N≤105

1≤數(shù)列中元素≤1091≤數(shù)列中元素≤109

輸入樣例:

5
3 4 2 7 5

輸出樣例:

-1 3 -1 2 2

我們看一下答案,代碼如下:

#include<iostream>
using namespace std;
const int N=100010;
int stack[N],top=0;
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int x=0;
        scanf("%d",&x);
        while(top&&stack[top-1]>=x)
        {
            top--;
        }
        if(!top)
            printf("-1 ");
        else
        {
            printf("%d ",stack[top-1]);
        }
        stack[top++]=x;
    }
    return 0;
}

四、數(shù)組模擬實(shí)現(xiàn)隊(duì)列

4.1 數(shù)組模擬實(shí)現(xiàn)隊(duì)列解析

同樣,我們用數(shù)組模擬實(shí)現(xiàn)隊(duì)列也是很簡單的。我們只要滿足隊(duì)列的先進(jìn)先出的性質(zhì)即可。我們直接看代碼,如下:

//********************* 模擬對(duì)列
int queue[N],head,tail=0;
//插入
queue[tail++]=x;
//彈出
head++;
//判斷隊(duì)列是否為空
if(head<tail) not empty;
else empty;
//取出對(duì)頭,隊(duì)尾元素
queue[head];
queue[tail-1];

我們這里給出一道用到隊(duì)列的例題,相對(duì)來說難一點(diǎn),我們看一下。

4.2 數(shù)組模擬實(shí)現(xiàn)隊(duì)列例題

給定一個(gè)大小為n≤106n≤106的數(shù)組。

有一個(gè)大小為kk的滑動(dòng)窗口,它從數(shù)組的最左邊移動(dòng)到最右邊。

你只能在窗口中看到kk個(gè)數(shù)字。

每次滑動(dòng)窗口向右移動(dòng)一個(gè)位置。

以下是一個(gè)例子:

該數(shù)組為[1 3 -1 -3 5 3 6 7],kk為33。

窗口位置最小值最大值
[1 3 -1] -3 5 3 6 7-13
1 [3 -1 -3] 5 3 6 7-33
1 3 [-1 -3 5] 3 6 7-35
1 3 -1 [-3 5 3] 6 7-35
1 3 -1 -3 [5 3 6] 736
1 3 -1 -3 5 [3 6 7]37

你的任務(wù)是確定滑動(dòng)窗口位于每個(gè)位置時(shí),窗口中的最大值和最小值。

輸入格式:

輸入包含兩行。

第一行包含兩個(gè)整數(shù)nn和kk,分別代表數(shù)組長度和滑動(dòng)窗口的長度。

第二行有nn個(gè)整數(shù),代表數(shù)組的具體數(shù)值。

同行數(shù)據(jù)之間用空格隔開。

輸出格式:

輸出包含兩個(gè)。

第一行輸出,從左至右,每個(gè)位置滑動(dòng)窗口中的最小值。

第二行輸出,從左至右,每個(gè)位置滑動(dòng)窗口中的最大值。

輸入樣例:

8 3
1 3 -1 -3 5 3 6 7

輸出樣例:

-1 -3 -3 -3 3 3
3 3 5 5 6 7

我們看一下答案,代碼如下:

#include<iostream>
using namespace std;
 
const int N=1000010;
int a[N],q[N];
int head,tail;
int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    head=0;
    tail=0;
    for(int i=0;i<n;i++)
    {
        //判斷對(duì)頭是否已經(jīng)劃出窗口
        if(head<tail&&i-k+1>q[head])
            head++;
        //對(duì)頭確定最小數(shù)
        while(head<tail&&a[q[tail-1]]>=a[i])
            tail--;
        q[tail++]=i;
        if(i>=k-1)
        printf("%d ",a[q[head]]);
    }
    printf("\n");
    head=0;
    tail=0;
    for(int i=0;i<n;i++)
    {
        //判斷對(duì)頭是否已經(jīng)劃出窗口
        if(head<tail&&i-k+1>q[head])
            head++;
        //對(duì)頭確定最大數(shù)
        while(head<tail&&a[q[tail-1]]<=a[i])
            tail--;
        q[tail++]=i;
        if(i>=k-1)
        printf("%d ",a[q[head]]);
    }
    return 0;
}

到此這篇關(guān)于C++數(shù)組模擬之單鏈表與雙鏈表和棧和隊(duì)列的實(shí)現(xiàn)過程的文章就介紹到這了,更多相關(guān)C++數(shù)組模擬內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請(qǐng)求的示例代碼

    C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請(qǐng)求的示例代碼

    HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本的協(xié)議,它是一種無狀態(tài)的、應(yīng)用層的協(xié)議,用于在計(jì)算機(jī)之間傳輸超文本文檔,通常在 Web 瀏覽器和 Web 服務(wù)器之間進(jìn)行數(shù)據(jù)通信,本文給大家介紹了C/C++發(fā)送與接收HTTP/S請(qǐng)求,需要的朋友可以參考下
    2023-11-11
  • C語言字符/字符串相關(guān)函數(shù)收藏大全

    C語言字符/字符串相關(guān)函數(shù)收藏大全

    這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 利用Matlab復(fù)刻舉牌加油小人生成器

    利用Matlab復(fù)刻舉牌加油小人生成器

    upuptoyou是一款非常有創(chuàng)意的小工具,可以在線生成舉牌小人,看起來很可愛,也比較有趣,并能用于表白,或節(jié)日送祝福等場景。本文將用Matlab復(fù)刻這一小工具,需要的可以參考一下
    2022-03-03
  • C/C++編寫推箱子小游戲

    C/C++編寫推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C/C++編寫推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • oaptt搭建http服務(wù)的過程詳解

    oaptt搭建http服務(wù)的過程詳解

    這篇文章主要介紹了oaptt搭建http服務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 利用Matlab實(shí)現(xiàn)陰影柱狀圖的繪制

    利用Matlab實(shí)現(xiàn)陰影柱狀圖的繪制

    陰影柱狀圖繪制的代碼MATHWORKS上也有,不過是生成圖片后,識(shí)別圖像上不同顏色塊并直接修改像素生成陰影線。這樣的生成方式不可逆且自由度較低,所以本文為大家?guī)淼氖且粋€(gè)直接畫線條填充的硬畫版本,希望有所幫助
    2022-09-09
  • C語言程序設(shè)計(jì)之指針的應(yīng)用詳解

    C語言程序設(shè)計(jì)之指針的應(yīng)用詳解

    為了讓大家能夠更準(zhǔn)確的了解C語言中指針的使用,本文為大家準(zhǔn)備了四個(gè)指針相關(guān)的例題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • C++ 如何實(shí)現(xiàn)順序棧(使用模板類)

    C++ 如何實(shí)現(xiàn)順序棧(使用模板類)

    這篇文章主要介紹了C++ 如何實(shí)現(xiàn)順序棧(使用模板類),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++輸出上三角/下三角/菱形/楊輝三角形(實(shí)現(xiàn)代碼)

    C++輸出上三角/下三角/菱形/楊輝三角形(實(shí)現(xiàn)代碼)

    本篇文章是對(duì)C++中輸出上三角/下三角/菱形/楊輝三角形的示例代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • Visual Studio 2019安裝、測試創(chuàng)建c語言項(xiàng)目(圖文教程)

    Visual Studio 2019安裝、測試創(chuàng)建c語言項(xiàng)目(圖文教程)

    這篇文章主要介紹了Visual Studio 2019安裝、測試創(chuàng)建c語言項(xiàng)目,Visual Studio 2019是完全免費(fèi)的,而且安裝比較簡單,現(xiàn)在把安裝步驟分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2020-03-03

最新評(píng)論

定兴县| 翁源县| 建德市| 静安区| 银川市| 林西县| 康保县| 吉木乃县| 吉木萨尔县| 谢通门县| 梅州市| 韩城市| 沙河市| 本溪| 宝鸡市| 连平县| 东辽县| 涿州市| 武隆县| 剑川县| 弋阳县| 新泰市| 扶沟县| 秀山| 黑水县| 双鸭山市| 绥化市| 克什克腾旗| 高雄县| 宜川县| 嘉荫县| 望都县| 句容市| 长春市| 潍坊市| 普格县| 吉木萨尔县| 如皋市| 神农架林区| 军事| 开鲁县|