链表之单循环链表
單鏈表之單循環(huán)鏈表
單向循環(huán)鏈表的關(guān)鍵所在是最后一個節(jié)點的next存儲了頭節(jié)點的地址,這是對單向循環(huán)鏈表的操作關(guān)鍵所在
接下來我將實現(xiàn)增、刪、改、查這四項最基本的操作,剩下你想要什么操作自己可以根據(jù)對鏈表的理解添加對應(yīng)的數(shù)據(jù)操作
后面main函數(shù)里是對代碼的測試
//單向循環(huán)鏈表//定義鏈表節(jié)點 typedef struct Node{int data;Node* next; }Node; Node * createList() {Node* headNode = (Node*)malloc(sizeof(Node));headNode->next = NULL;return headNode; } //創(chuàng)建節(jié)點 Node* createNode(int data) {Node * newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = NULL;return newNode; } //增加節(jié)點 void addNode(Node * headNode, int data) {Node * newNode = createNode(data);if (headNode->next == NULL){headNode->next = newNode;newNode->next = headNode;}else{newNode->next = headNode->next;headNode->next = newNode;} } //刪除節(jié)點 void deleteNode(Node * headNode,int data) {//先找節(jié)點,對節(jié)點的指針要進行移動Node* pPro = headNode;Node *pPos = headNode->next;while (pPos->data != data&&pPos->next!=NULL){pPro = pPos;pPos = pPos->next;}if (pPos->next == NULL){printf("你要刪除的節(jié)點不存在!\n");return;}pPro->next = pPos->next;free(pPos);} //查找節(jié)點 void findNode(Node * headNode, int data) {Node * pMove = headNode->next;while (pMove->data != data){pMove = pMove->next;}printf("你想要找的節(jié)點數(shù)據(jù):%d,已找到!\n", pMove->data); } //改動節(jié)點內(nèi)的數(shù)據(jù) void modifyNodeData(Node *headNode, int updata, int data) {//這個和找節(jié)點的思路是一樣的,先找到指定數(shù)據(jù)節(jié)點,再對其進行修改Node * pMove = headNode->next;while (pMove->data != data){pMove = pMove->next;}pMove->data = updata;printf("修改數(shù)據(jù)成功!\n");} //輸出節(jié)點的數(shù)據(jù) void printList(Node * headList) {Node * pMove = headList->next;while (pMove != headList)//當你訪問節(jié)點的next里的地址不是頭節(jié)點的地址繼續(xù)向下走{printf("%d--", pMove->data);pMove = pMove->next;}printf("\n"); } int main() {Node *list = createList();for (int i = 1; i < 11; i++){addNode(list, i);}printList(list);findNode(list, 5);printList(list);modifyNodeData(list, 45, 6);printList(list);deleteNode(list, 9);printList(list);return 0; }總結(jié)
- 上一篇: 文件夹 计算机无法使用,电脑文件夹提示被
- 下一篇: python类实例覆盖_避免类实例覆盖默