循环链表C语言实现
2014-05-13 17:33
162 查看
在单链表的基础上,只要把尾指针改为指向头结点,则相应的单链表也变成了循环链表(原来的尾指针指向的是NULL)
#include <stdio.h> #include <stdlib.h> //循环链表 //循环链表与单链表大体相同,仅仅是单链表的尾指针指向的是NULL,而循环链表指向的是第1个元素 //基本的数据结构还是一样的 #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef int Status; typedef struct { ElemType data; struct Node *next; }Node,*List; //1. 链表的初始化 Status InitList(List *L){ *L=(List)malloc(sizeof(Node)); (*L)->next=*L;//尾指针指向头指针 (*L)->data=NULL; return OK; } //2. 判断链表是否为空 Status IsEmpty(List L){ //若为空,返回TRUE // 如果尾指针指向头指针,则为空 if(L->next==L){ return TRUE; }else{ return FALSE; } } //3. 链表的整表创建 Status CreateList(List *L,int n){ //创建长度为n的循环链表 int i; List p; srand(time(0)); for(i=0;i<n;i++){ p=(List)malloc(sizeof(Node)); p->data=rand()%100+1; p->next=(*L)->next; (*L)->next=p; } return OK; } int main() { List L,T; if(OK==InitList(&L)){ printf("初始化成功\n"); } if(TRUE==IsEmpty(L)){ printf("链表为空!\n"); }else{ printf("链表不为空!\n"); } printf("输入初始化循环链表的长度:"); int i,n; scanf("%d",&n); if(OK==CreateList(&L,n)){ //循环输出3倍长度的链表值(循环链表可以无限循环输出下去,因为是环) T=L; for(i=0;i<3*n;i++){ printf("%d\t",T->data); T=T->next; } } return 0; }
相关文章推荐
- Altova XMLSpy 生成C++工程实例
- C++引用
- C++类
- C\C++小知识汇总
- 24点 C/C++代码
- EFFECTIV C++
- C++。memory leak检查办法。一个当内存分配后未回收(或导致各种问题)的检查办法
- C++ shared memory leak, how to clear shared memory?
- c++实现用欧几里得算法求两个整数的最大公约数
- Effective C++之 拒绝编译器自动生成函数
- c++实现对分查找
- 设计模式之装饰模式 c++实现和详细分析
- C/C++ 指针 <一>
- c/c++全局变量与局部变量
- C++中std::tr1::function和bind 组件的使用
- C++第12周(春)项目 4 - 日期时间类
- c语言---数组
- c语言---函数
- c语言---循环结构
- C/C++语言void及void指针深层探索(转载)