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