範文齋

位置:首頁 > 職場範文 > 面試

C數據結構面試題 以及答案

面試2.79W

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

C數據結構面試題 以及答案
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;
}
of()和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。