數據結構循環鏈表,C循環鏈表詳解

 2023-12-25 阅读 31 评论 0

摘要:不會鏈表?先看:C單鏈表操作寫出來了不會用?看: 約瑟夫環(c循環鏈表)?#include <stdio.h> #include <stdlib.h>#define maxn 100????typedef int DataType;????//將數據類型定義為DataType,方便修改,這樣如果需要改成char只需要改這里就行了 typedef struct Node{D
不會鏈表?先看:
C單鏈表操作
寫出來了不會用?看:

約瑟夫環(c循環鏈表)?

#include <stdio.h>
#include <stdlib.h>#define maxn 100????typedef int DataType;????//將數據類型定義為DataType,方便修改,這樣如果需要改成char只需要改這里就行了
typedef struct Node{DataType data;struct Node *next;
}Node;Node *CreatList(DataType a[],int n){Node *first = (Node*)malloc(sizeof(Node));first->next = NULL;Node *r = NULL,*p = NULL;r = first;for(int i = 0;i < n;i++){p = (Node*)malloc(sizeof(Node));p->data = a[i];p->next = NULL;r->next = p;r = p;}p->next = first->next; //鏈表末端指向鏈表頭 //此處是單鏈表和循環鏈表的差別return first;}//刪除第x位的元素
void DeleteData(Node *first,int x){Node *p = first->next;Node *r;int cnt = 1;????//cnt統計結點數while(p->next != first->next && cnt < x -1){    //判斷是否遍歷完成,當P為鏈表尾的時候,P->next應指向第一個元素,即first-next;p = p->next;}//敲黑板劃重點//比如說鏈表中有數據 1 2 3 4 5//要刪除位置為3 (此時對應數據也是3)//則令P指向第2個位置時停下來(修改指針域使P(此時P指向2)->next==P->next->next  (p->next->next指向4)r = p->next;p->next = r->next;free(r); //釋放刪除位的空間,防止內存泄漏//如果要取得刪除的數據//則在函數聲明中添加參數DataType *ptr//并將要刪除的數據賦值給×ptr后再free
}//循環鏈表其他操作如果需要遍歷,則類似此函數,設置一個標記flag即可
//具體函數可參考C單鏈表操作
//http://blog.csdn.net/bestsort/article/details/78688374
void PrintList(Node *first){int flag = 0;//設置標記,當鏈表遍歷完成后停止Node *p = first->next;while(p != first ->next || !flag){printf("%d ",p->data);p = p->next;flag = 1;}
}int main()
{Node* first = NULL;int n;int i,k = 2,x = 1;DataType Data[maxn];scanf("%d",&n);for(i = 0;i < n;i++)scanf("%d",&Data[i]);first = CreatList(Data,n);PrintList(first);DeleteData(first,k);printf("\nAfter Delete:\n");PrintList(first);return 0;
}

轉載于:https://www.cnblogs.com/bestsort/p/10588918.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/194988.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息