我想在一個給定的輸入順序遍歷循環鏈表(v1->v2->v3)
,可以說像循環列表遍歷引擎
{v1,v3,v2,v2,v1,v3,v2,v1,v1,v3,v2,v2,v1,v2,v3}
。
我編寫了下面的程序作爲3個節點的測試,並且想要遞增地爲8,64,512,4096等節點縮放。
我的實現理念要求下面的程序僅在Abstract State Machine
上運行,它只接受下面的函數作爲處理輸入。我基本上希望在遍歷時儘量減少engine_spin_at_gear()
的循環次數。我可能會在non-blocking
模式下使用這樣一個瘋狂的abstraction
來模擬/虛擬process-execution
作爲engine-spin
與測量單位爲rpm,但我真的很喜歡關於調試engine_spin_at_gear()
函數的建議。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MILES 15
struct package
{
// ... other members data ...
struct package *next;
}*v1, *v2, *v3;
int input_arr[MILES] = {1,3,2,2,1,3,2,1,1,3,2,2,1,2,3};
struct package *base(struct package *_vN)
{
if (_vN)
return _vN;
else
return NULL;
}
struct package *deliver(struct package *_vNP)
{
if (_vNP)
return base(_vNP->next);
else
return NULL;
}
void shift_gear(struct package *_feed)
{
_feed->next = NULL;
}
struct package *engine_spin_at_gear(struct package *_init_cycle0, int countSession)
{
while (countSession--) {
shift_gear(_init_cycle0);
return deliver(base(_init_cycle0));
}
return NULL;
}
struct package *journey(struct package *_current_frame, int _start, int _end)
{
int rpm = (_end > _start)?_end-_start:_start-_end;
if (rpm)
return engine_spin_at_gear(_current_frame, rpm);
else
return v1;
}
struct package *ignition_phase(int _batteryS, int _chargedL)
{
return journey(v1, _batteryS, _chargedL);
}
void transmit_in_order(int*input_arr)
{
struct package *v6;
int i;
for (i=0; i<MILES-1; i++) {
v6 = ignition_phase(input_arr[i], input_arr[i+1]);
printf("%p\n", v6);
}
}
int main()
{
v1 = malloc(sizeof(struct package));
v2 = malloc(sizeof(struct package));
v3 = malloc(sizeof(struct package));
v1->next = v2;
v2->next = v3;
v3->next = v1;
printf("v1=%p\tv2=%p\tv3=%p\n", v1, v2, v3);
transmit_in_order(input_arr);
return 0;
}
當我在Linux上運行我的程序的GCC可執行文件時,我得到以下輸出。
v1=0x918b008 v2=0x918b018 v3=0x918b028
(nil)
(nil)
0x918b008
(nil)
(nil)
(nil)
(nil)
0x918b008
(nil)
(nil)
0x918b008
(nil)
(nil)
(nil)
(nil)
或者,是否需要更改shift_gear()
函數?我可以在保持scalability-factor
完好的同時進行更多優化嗎?提前致謝。如果我想把所有這些功能放在C++
中作爲Class Engine
和Class Gearbox
,你能告訴我一個原型嗎?
的return'return deliver(base(_init_cycle0));'在engine_spin_at_gear內部的while循環內部看起來很可疑。它將始終在第一次循環中返回。 –
@CharlieBurns即使當我改變爲'return deliver(_init_cycle0)'時,輸出保持不變。奇怪!! –
將'}'的結束移動到'shift_gear(_init_cycle0);'後面而不是它在的位置。 – ryyker