iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
自我挑戰組

大二資工人-30天成長日記系列 第 18

大二資工人-DAY18-日常分享

  • 分享至 

  • xImage
  •  

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;
		}
	}
}

印出linkedList

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;
	}
}

今天就這樣ㄌ,感恩。


上一篇
大二資工人-DAY17-挑戰失敗
下一篇
大二資工人-DAY19-小筆記
系列文
大二資工人-30天成長日記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言