資料結構筆試題

2021-06-09 02:31:43 字數 3132 閱讀 8575

一、如何判斷乙個單鏈表是有環的?(注意不能用標誌位,最多只能用兩個額外指標)

struct node

bool check(const node* head) {} //return false : 無環;true: 有環

一種o(n)的辦法就是(搞兩個指標,乙個每次遞增一步,乙個每次遞增兩步,如果有環的話兩者必然重合,反之亦然):

bool check(const node* head)

return false;

} 二、刪除乙個單項鍊表的最中間的元素,要求時間盡可能短(不能使用兩次迴圈)

struct link

;void delmiddle(link *head)

else

link *temp = low->next;

low->next = low->next->next;

delete temp;}}

int main()

print(head);

delmiddle(head);

print(head);

return 0;

}三、輸入n,求乙個n*n矩陣,規定矩陣沿45度線遞增(威盛)

/*** 得到如下樣式的二維陣列

* zigzag(jpeg編碼裡取象素數據的排列順序)

**   0, 1, 5, 6,14,15,27,28,

*   2, 4, 7,13,16,26,29,42,

*   3, 8,12,17,25,30,41,43,

*   9,11,18,24,31,40,44,53,

*   10,19,23,32,39,45,52,54,

*   20,22,33,38,46,51,55,60,

*   21,34,37,47,50,56,59,61,

*   35,36,48,49,57,58,62,63

*/void zigzag(int n)

}bool flag = false; //這個標誌位用來判斷是從45度角生成還是225度角生成

int count = 0;

for(i=0; i=0; r--)

flag = true;}}

for(i=n-1; i>=0; i--)  //生成的是下半部分的資料

網上還有乙個人寫了乙個比較巧的演算法:

/*** 得到如下樣式的二維陣列

* zigzag(jpeg編碼裡取象素數據的排列順序)

**   0, 1, 5, 6,14,15,27,28,

*   2, 4, 7,13,16,26,29,42,

*   3, 8,12,17,25,30,41,43,

*   9,11,18,24,31,40,44,53,

*   10,19,23,32,39,45,52,54,

*   20,22,33,38,46,51,55,60,

*   21,34,37,47,50,56,59,61,

*   35,36,48,49,57,58,62,63

*/#include

int main()

}/* 陣列賦值 */

squa = n*n;   

for(i = 0; i < n; i++)

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

}/* 列印輸出 */   

for(i = 0; i < n; i++)

return 0;

}四、列印1到1000的整數,不能使用流程控制語句(for,while,goto等)也不能使用遞迴

1.typedef struct _test

}test;

int test::a = 1;

int   main()  

2.#include  

#define   b   p,p,p,p,p,p,p,p,p,p

#define   p   l,l,l,l,l,l,l,l,l,l

#define   l   i,i,i,i,i,i,i,i,i,i,n

#define   i   printf( "%3d   ",i++)

#define   n   printf( "\n ")

int  main() 或

#define a(x) x;x;x;x;x;x;x;x;x;x;

int main ()

五、struct   s   ;

void   main()

問程式會在哪一行死掉。 (microsoft)

解: s   s;

int   *   p   =   &s.i;        的位址儲存在p裡

p[0]   =   4;                    //修改了s.i

p[1]   =   3;                    //修改了s.p

s.p   =   p;                    指向s.i

s.p[1]   =   1;               //修改s.p本身

s.p[0]   =   2;               指向的是0x00000001,嘗試向這裡寫,出錯

s.p[0]       =       2;   時出錯

因為s.p存的是s.i的位址,s.p[1]為s.p,當s.p[1]=1時,s.p此時存放的是1了,而不是位址s.i,故在s.p[0]   =   2時出錯.

此時相當於s.p=ox00000001;位址ox0000001   =   2;當然就出錯了

如果語句s.p[0]   =2   先於s.p[1]=1則程式就不會出錯.此時語句相當於s.i=2;s.p=1;

六、題目描述:

1.   int   swap(int   *x,int   *y)

請改錯,溢位已經考慮,不是錯誤

2. void   foo(int   *x,   int   *y)

void   fun(int   *x,   int   *y)

問兩個函式是否等價,能否互換

解答:第一題的函式是交換。但假如考慮x,   y都是指向同乙個變數,結果是這個變數的值為0.

第二題的兩個函式是有區別的,也考慮x,y是指向同乙個變數.這樣第乙個函式的結果是這個變數的4倍.但第二個函式的結果是變數的3倍.

資料結構筆試題目

1 c 編成求二叉樹的深度 int bintreedepth link head 2 排序二叉樹插入乙個節點或雙向鍊錶的實現 排序二叉樹 左小於根,根小於右。左右又分別是排序二叉樹。前序遍歷 根左右 中序遍歷 左根右 後序遍歷 左右根 排序二叉樹插入乙個結點 大於左,往右找,小於右往左找,遞迴實現。...

筆試題之資料結構

時間複雜度 整個演算法的執行時間與基本操作重複執行的次數成正比。參考kmp演算法,該演算法的時間複雜度為q n 通常,模式串的長度n比主串的長度m要小的多 穩定排序 排序前後,數值的相對前後位置不變的為穩定排序,否則為不穩定排序。1 簡單排序,時間複雜度o n的平方 不穩定 2 快速排序,時間複雜度...

資料結構筆試題三

一 選擇題 每小題2分,共8分 1.若需要利用形參直接訪問實參,則應把形參變數說明為 引數。a.指標 b.引用 c.值 2.在乙個單鏈表hl中,若要在指標q所至結點的後面插入乙個由指標p所指向的結點,則執行 a.q next p next p next q b.p next q next q p c...