目錄

1.C/C++編譯器中虛表是如何完成的?
1)一個虛函數(shù)的類的大小 4
2)三個虛函數(shù)的類的大小4
2.給兩個變量,如何找出一個帶環(huán)單鏈表中是什么地方出現(xiàn)環(huán)的?
1)方法1:一一對比尾巴的地址是否是鏈表中的某一地址
2)方法二:快慢指針法,測試方法如上
如果一個類包含了虛函數(shù),不管有多少個虛函數(shù),都只增加了一個虛指針(指向虛表)的大小4,有了一個VPtr,vptr指向一個虛表(vftable),虛表里面存儲本類中虛函數(shù)的入口地址。
1)一個虛函數(shù)的類的大小 4

綜上所述,類的大小與虛函數(shù)的個數(shù)無關(guān),只要存在一個就棧四個字節(jié)空間。
2.給兩個變量,如何找出一個帶環(huán)單鏈表中是什么地方出現(xiàn)環(huán)的? 1)方法1:一一對比尾巴的地址是否是鏈表中的某一地址typedef struct CNode
{
int data;//數(shù)據(jù)域
struct CNode* next;//后繼指針
}CNode, * CList;
//初始化
void InitList(CList plist)
{
assert(plist != NULL);
if (plist == NULL)
{
return;
}
//數(shù)據(jù)域不使用
//只有頭節(jié)點時 自己成一個循環(huán)鏈表
plist->next = plist;
}
//尾插
bool Insert_tail(CList plist, int val)
{
assert(plist != NULL);
if (plist == NULL)
{
return false;
}
//1.申請一個節(jié)點
CNode* p = (CNode*)malloc(sizeof(CNode));
assert(p != NULL);
//2.填充數(shù)據(jù)
p->data = val;
//3,找尾巴
CNode* q;
for (q = plist; plist->next != plist; q = q->next)
{
;
}
//4.前后連接
p->next = q->next;
q->next = p;
return true;
}
//插入數(shù)據(jù),在plist鏈表的pos位置插入val;
bool Insert(CList plist, int pos, int val)
{
assert(plist != NULL);
if (plist == NULL)
{
return false;
}
if (pos< 0 || pos >= GetLength(plist))
{
return false;
}
//1.申請節(jié)點 插入值
CNode* p = (CNode*)malloc(sizeof(CNode));
assert(p != NULL);
//2.填充數(shù)據(jù)
p->data = val;
int i = 0;
CNode* q;
for (q = plist, i = 0; i< pos; i++, q = q->next)
{
;
}
p->next = q->next;
q->next = p;
return true;
}
bool Circle(CList plist)
{
assert(plist != NULL);
if (plist == NULL)
{
return false;
}
//1.找到尾巴
CNode* p;
for (p = plist; p->next != plist; p = p->next)
{
;
}
//2.一一對比尾巴的地址是否是鏈表中的某一地址
for (CNode* q = plist; q->next != plist; q = q->next)
{
if (p== q->next)
{
return true;
}
}
return false;
}
//main.c
CNode head;
InitList(&head);
for (int i = 0; i< 20; i++)
{
Insert_head(&head, i);
//Insert_tail(&head, i);
}
Show(&head);
Insert(&head, 4, 300);
Show(&head);
if (Circle(&head))
{
printf("此鏈表有環(huán)\n");
}
else
printf("此鏈表無環(huán)\n");
return 0;
}結(jié)果:
//判斷鏈表是否有環(huán)
bool Circle(List plist)
{
assert(plist != NULL);
if (plist == NULL||plist->next==NULL)
{
return false;
}
Node* p = plist->next;//慢指針
Node* q = plist->next->next;//快指針
while (q != NULL && q->next != NULL)
{
if (p == q)
{
break;
}
p = p->next;//慢指針一次走一步
q = q->next->next;//快指針一次兩步
}
if (q == NULL || q->next == NULL)
{
return false;
}
else
{
return true;
}
}你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前名稱:今日刷題之虛表在編譯器里怎么實現(xiàn)和如何查看鏈表是否有環(huán)-創(chuàng)新互聯(lián)
新聞來源:http://chinadenli.net/article36/hhspg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、自適應(yīng)網(wǎng)站、移動網(wǎng)站建設(shè)、外貿(mào)建站、搜索引擎優(yōu)化、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容