HI! 我是Maple 剛滿20歲沒多久的小朋友 請ㄅ要欺負窩QAQ
今天終於把資料結構的作業寫完了(前情提要
一開始當然是先寫讀檔 廢話
ListNode *newnode; //創造新節點
newnode = (ListNode*)malloc(sizeof(ListNode)); //給予空間
last->rlink = newnode; //last右邊指向newnode
first->llink = newnode; //first左邊指向newnode
newnode->data = data; //存入資料
newnode->llink = last; //newnode左邊指向last
newnode->rlink = first; //newnode右邊指向first
last = newnode; //把newnode變成last
我一開始是想要用first跟last來做判斷要怎麼放入資料
if(first != NULL && last != NULL){
程式碼們
} else if(first == NULL){
blablabla..
} else if(last == NULL){
blablabla..
}
但我發現他都不會進到first == NULL
裡面,我覺得很奇怪,後來把malloc拿掉才能進去(原來malloc後就不是NULL了QAQ),不過更有趣的是我後來發現助教給的範本其實有初始化的值那我就直接放進去就好啦,這樣就不會有first跟last有NULL的情況了真棒,不過這樣好像會有bug但工程師當然是要寫有bug的程式阿不然就沒飯吃了
void DoublyLinkedList::insertLeft(int data, int position){ //插入資料到指定位置的左側
ListNode *current, *add;
add = (ListNode*)malloc(sizeof(ListNode));
add->data = data;
current = first; //紀錄串列位置
int i = 0; //計數器
while(1){
if(i++ == position){
add->rlink = current;
add->llink = current->llink->rlink;
current->llink->rlink = add;
current->llink = add;
break;
}
current = current->rlink;
}
}
void DoublyLinkedList::remove(int position){ //移除指定位置的資料
ListNode *current;
current = first;
int i = 0;
while(1){
if(i++ == position){ //移動I次
if(current == first){ //如果跟first一樣,把first右移
first = current->rlink;
} else if(current == last){ //如果跟last一樣,把last左移
last = current->llink;
}
current->llink->rlink = current->rlink; //進行移除
current->rlink->llink = current->llink; //進行移除
free(current); //釋放記憶體
break;
}
current = current->rlink; //往右移動位置
}
}
int DoublyLinkedList::search(int data){ //找出指定的數值
ListNode *current;
current = first;
int i = 0; //計數器
while(1){
if(current->data == data){
return i;
}
i++;
current = current->rlink;
if(current == first){
printf("No this data");
break;
}
}
}
void DoublyLinkedList::print(){ //印出鏈結串列的資料
ListNode *current;
current = first;
while(1){
if(current->rlink == first){
printf("| %d |", current->data);
break;
}
printf(" | %d | -> ", current->data);
current = current->rlink;
}
}
今天就這樣ㄌ,感恩。