1. 首頁
  2. 面試

C資料結構面試題 以及答案

C資料結構面試題 以及答案

做了這麼多年java,做java偏向於應用,都用別人的外掛和jar包。現在面臨畢業,大公司技術筆試離不開資料結構,整理了下別人的題目。然後自己做了下。寫這裡留紀念,也希望對大家有幫助!
程式都在MinGW上跑通,VC我不知道。。
1.把一個連結串列反向
#include

typedef   struct   List
{   
int num;
struct List *next;
}test;
test *create_list()
{
test *head;
test *first;
test *temp =NULL;
first=head=new test;
for(int i=0;i<10;i++)
{
head->num=i;
temp=new test; //偷懶,用C++的new了,C用記憶體分配函式
head->next=temp;
temp->next=NULL;
head=temp;
}
return&#160;&#160; first;
}
void print(test *head)
{
while(head->next!=NULL)
{
printf("%d",head->num);
head=head->next;
}
}
test *change_list(test *head)
{
test *temp,*sixer;
temp=head->next;
head->next=NULL;
while(temp->next!=NULL)
{
sixer=temp->next;
temp->next=head;
printf("%d-head-",temp->num);
head=temp;
temp=sixer;
printf("%d-temp-",temp->num);
}
temp->next=head;
return temp;
}

int&#160;&#160; main()
{
test *onelist;
onelist = create_list();
print(onelist);
onelist = change_list(onelist);
print(onelist);
}
2.&#160; 一個二叉樹的三種遍歷方法的輸出結果
前序遍歷,先根接點。中序,根左邊的根右邊的,例子:
abdgcefh,中序遍歷訪問順序是dgbaechf,則其後續遍歷的結點訪問順序是
a為根,dgb為左子樹,echf為右子樹
接下來看左子樹的前序遍歷為bdg
b首先被訪問
可以知道b為左子樹的根,與a相連
再看左子樹的中序遍歷dgb
d和g都在b之前就被訪問
所以b和g應該在b的左子樹上
而dg的確定再根據前序遍歷
d先被訪問
則d為根
再看中序遍歷也是d先被訪問
可以確定g為d的右子樹
左邊就可以確定出來了
如果上面看懂了
右邊就很簡單,一樣的道理
前序遍歷cefh
確定c為右子樹的根
再看中序遍歷echf
e為c的左子樹,hf為c的'右子樹
hf的確定在看前序遍歷f先被訪問
f為根
中序遍歷h先被訪問
h為f的左子樹
整棵樹就出來了
3.
希表和陣列的定義,區別,優缺點

百度
4.遞迴的折半查詢演算法
#include

using namespace std;
void creat(int a[])
{
for(int i=0;i<10;i++){
a[i]=i;
}
}
void print(int a[])
{
for(int i=0;i<10;i++){
printf("%d-",a[i]);
}
}
int Search(int a[],int key,int left ,int right)
{
int mid;&#160;
while(left<=right){&#160;
mid = (left+right)/2;&#160;
if(key==a[mid]){&#160;
return mid;&#160;
}&#160;
else if(keyright = mid-1;&#160;
return Search(a,key,left,right);&#160;
}&#160;
else{&#160;
left = mid+1;&#160;
return Search(a,key,left,right);&#160;
}&#160;
}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
return -1;&#160;&#160;
}

int main()
{
int a[10];
int i;
creat(a);
print(a);
int key;
cin>>key;
int left = 0;&#160;
int right = 10;&#160;
i=Search(a,key,left,right);
printf("%d->%d",i,a[i]);
return 1;
}
5.sizeof()和strlen()的使用.
sizeof位元位元組數長度。strlen長度比如char a[2]={1,2} 嗎sizeof是2,strlen是3包括了/0而且sizeof是可以測int a[]這種的int a[2]={1,2} 的sizeof是8.2個4位元組int。