在實現單鏈表時要注意對單鏈表的邏輯儲存、物理儲存有清晰的概念。
如上圖鍊錶已經完成,其邏輯結構如上。當需要對其進行操作,比如插入、刪除,通常需要引 入
指標,如上的ptr1、ptr2。在程式設計時一定要注意通過ptr1、ptr2對鍊錶結構的操作是正確的。 而
不僅僅是你覺得正確的。
下面給大家看下我的單鏈表的實現,錯誤之處還請指正。
1、vc6實現,包括三個檔案:sll.h、sll.c、main.c
2、sll.h單鏈錶類、結點類的說明
#ifndef _sll_h_
#define _sll_h_
//加以下兩句是為了使煉表中包含的資料型別可以更靈活
#define datatype int
#define endofdata 0
//單鏈表的節點
class node
;//單鏈表,其中儲存的元素為整數
class sll
;#endif
3、sll.c單鏈錶類成員函式的實現
#include #include "sll.h"
using namespace std;
sll::sll() //建構函式
sll::~sll() //析構函式
}void sll::create()
ptrnode->data = data;
flagnumone = false;
} else
}if(head->data == endofdata) //鍊錶為空的情況 }
int sll::getlength()
return num;
}void sll::del(datatype num)
if(ptrnodeahead->data == num) //找到num結點
else //如果num節點不是頭結點
}else //鍊錶搜尋結束也未找到num結點
}}bool sll::insert(int pos,datatype num)
node *ptrnodeahead = head;
node *ptrnodefollow = null;
int tmpnum = 0;
while(1) //獲取插入位置的指標,ptrnodeahead指向待插入的位置,ptrnodefollow指向帶插入位置的下一結點
ptrnodefollow = ptrnodeahead;
ptrnodeahead = ptrnodeahead->next;
} //以下兩句將待插入結點的資料準備好
node *ptrtmpnode = new node;
ptrtmpnode->data = num;
if(ptrnodeahead == head) //如果是插入頭結點 /*
else if(ptrnodeahead->next == null) */
else //插入中間節點,此種方法永遠也不能插入尾結點,插入是前向的
return true;
}node* sll::gethead()
void sll::reverse()
head = ptrnodefllow;
}void sll::print()
cout
++index;
ptrnode = ptrnode->next; //鍊錶向下延展
} return -1; //未找到num結點返回-1
C 單鏈表實現
1 單向鍊錶 單向鍊錶 include include class cnode 節點類 class clist 鍊錶類 cnode movetrail cnode pnode 移動到尾節點 return ptmp void addnode cnode pnode 新增節點 else m nodesu...
c 實現單鏈表
include include using namespace std typedef int datatype struct linknode 建立乙個節點 class slist void swap slist s slist const slist s head null tail null ...
單鏈表(C實現)
ifndef list h define list h typedef struct node node typedef struct list list initlist int insertlist list l,void data,int size node findnodebykey lis...