牛客网刷题知识汇总3
typedef struct
char flag[3];
short value;
} sampleStruct;
union
{
char flag[3];
short value;
} sampleUnion;
假設?sizeof(char)=1,sizeof(short)=2,那么sizeof(sampleStruct) = 6?, sizeof(sampleUnion) = 4
結構體?
字符型占用1字節,不需要字節對齊? short占用2字節,需要兩字節對齊? 所以sizeof(sampleStruct) = 3 *(1字節) + (1個補齊字節) + 1*(2字節) = 6? 聯合體 占用大小采用成員最大長度的對齊,最大長度是short的2字節 但?char flag[3]需要3個字節 所以?sizeof(sampleUnion) =?2*(2字節) = 4 對Union結構體,sizeof的取值不僅考慮sizeof最大的成員,還要考慮對齊字節,對齊字節的取值是取成員類型字節最大值與指定對齊字節(32位機器默認是4,64位機器默認是8)兩者中的較小值,本題中成員類型最大值為short,2,與指定對齊字節4比較取2,所以要2字節對齊,如果去掉short變量,則取char的1字節對齊,結果為3文章轉載自 (www.slyar.com)
KMP 算法我們有寫好的函數幫我們計算 Next 數組的值和 Nextval 數組的值,但是如果是考試,那就只能自己來手算這兩個數組了,這里分享一下我的計算方法吧。
計算前綴 Next[i] 的值:
我們令 next[0] = -1 。從 next[1] 開始,每求一個字符的 next 值,就看它前面是否有一個最長的"字符串"和從第一個字符開始的"字符串"相等(需要注意的是,這2個"字符串"不能是同一個"字符串")。如果一個都沒有,這個字符的 next 值就是0;如果有,就看它有多長,這個字符的 next 值就是它的長度。
計算修正后的 Nextval[i] 值:
我們令 nextval[0] = -1。從 nextval[1] 開始,如果某位(字符)與它 next 值指向的位(字符)相同,則該位的 nextval 值就是指向位的 nextval 值(nextval[i] = nextval[ next[i] ]);如果不同,則該位的 nextval 值就是它自己的 next 值(nextvalue[i] = next[i])。
舉個例子:
計算前綴 Next[i] 的值:
next[0] = -1;定值。
next[1] = 0;s[1]前面沒有重復子串。
next[2] = 0;s[2]前面沒有重復子串。
next[3] = 0;s[3]前面沒有重復子串。
next[4] = 1;s[4]前面有重復子串s[0] = 'a'和s[3] = 'a'。
next[5] = 2;s[5]前面有重復子串s[01] = 'ab'和s[34] = 'ab'。
next[6] = 3;s[6]前面有重復子串s[012] = 'abc'和s[345] = 'abc'。
next[7] = 4;s[7]前面有重復子串s[0123] = 'abca'和s[3456] = 'abca'。
計算修正后的 Nextval[i] 值:
nextval[0] = -1;定值。
nextval[1] = 0;s[1] != s[0],nextval[1] = next[1] = 0。
nextval[2] = 0;s[2] != s[0],nextval[2] = next[2] = 0。
nextval[3] = -1;s[3] == s[0],nextval[3] = nextval[0] = -1。
nextval[4] = 0;s[4] == s[1],nextval[4] = nextval[1] = 0。
nextval[5] = 0;s[5] == s[2],nextval[5] = nextval[2] = 0。
nextval[6] = -1;s[6] == s[3],nextval[6] = nextval[3] = -1。
nextval[7] = 4;s[7] != s[4],nextval[7] = next[7] = 4。
?
以下程序段完全正確的是(c)A.int *p; scanf("%d",&p);
B.int *p; scanf(“%d”,p);
C.int k, *p=&k; scanf("%d",p);D.int k, *p; *p= &k; scanf(“%d”,p);
B不對 scanf中&P是整型變量空間的地址,但P沒有初值,P的值是不確定的?tcpdump是簡單可靠網絡監控的實用工具 top?顯示活動進程方面的情況 netstat顯示網絡有關的信息,比如套接口使用情況、路由、接口、協議(TCP等)等 ifconfig是查看活動的網卡信息 靜止就緒:這個也叫做掛起就緒,是指進程被對換到輔存時的就緒狀態,是不能被直接調度的狀態,只有當主存中沒有活躍就緒態進程,或者是掛起就緒態進程具有更高的優先級,系統將把掛起就緒態進程調回主存并轉換為活躍就緒。 活動就緒:進程在主存并且可被調度的狀態。 靜止睡眠(阻塞):是指進程對換到輔存時的阻塞狀態,一旦等待的事件產生便進入靜止就緒狀態。 活動睡眠(阻塞):是指進程已在主存,一旦等待的事件產生便進入活躍就緒狀態。 正在執行的進程由于其時間片用完被暫停執行,此時進程應從執行狀態變為活動就緒狀態; 處于靜止睡眠狀態的進程,在進程等待的事件出現后,應變為靜止就緒狀態; 若進程正處于執行狀態時,因終端的請求而暫停下來以便研究其運行情況,這時進程應轉變為靜止就緒狀態;若進程已處于睡眠狀態,則此時應轉變為靜止睡眠狀態。 先序序列為a,b,c,d 的不同二叉樹的個數是?()?。 根據二叉樹前序遍歷和中序遍歷的遞歸算法中遞歸工作棧的狀態變化得出:前序序列和中序序列的關系相當于以前序序列為入棧次序,以中序序列為出棧次序。因為前序序列和中序序列可以唯一地確定一棵二叉樹,所以題意相當于“以序列?a,b,c,d?為入棧次序,則出棧序列的個數為?”,對于?n?個不同元素進棧,出棧序列的個數為?=14?。(卡特蘭數) 結構體內存對齊規則(請記住三條內存規則(在沒有#pragam pack宏的情況下)
構造函數和析構函數聲明定義的時候,都是無類型的,不能添加 void.
結構體所占用的內存與其成員在結構體中的聲明順序有關,其成員的內存對齊規則如下:
(1)每個成員分別按自己的對齊字節數和PPB(指定的對齊字節數,32位機默認為4)兩個字節數最小的那個對齊,這樣可以最小化長度。如在32bit的機器上,int的大小為4,因此int存儲的位置都是4的整數倍的位置開始存儲。
(2)復雜類型(如結構)的默認對齊方式是它最長的成員的對齊方式,這樣在成員是復雜類型時,結構體數組的時候,可以最小化長度。
(3)結構體對齊后的長度必須是成員中最大的對齊參數(PPB)的整數倍,這樣在處理數組時可以保證每一項都邊界對齊。
?(4)結構體作為數據成員的對齊規則:在一個struct中包含另一個struct,內部struct應該以它的最大數據成員大小的整數倍開始存儲。如 struct A 中包含 struct B, struct B 中包含數據成員 char, int, double,則 struct B 應該以sizeof(double)=8的整數倍為起始地址。轉載于:https://www.cnblogs.com/tsunami-lj/p/6417186.html
總結
以上是生活随笔為你收集整理的牛客网刷题知识汇总3的全部內容,希望文章能夠幫你解決所遇到的問題。