|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
原理:
代码:
- #include <stdio.h>
- #include <stdlib.h>
- #define MAXTSIZE 13
- typedef struct Like
- {
- int T;
- struct Like *next;
- }Like, *Likes;
- void InitList(Likes *E); //创建头节点初始化链表
- void GetList(Likes *E); //在头节点之后创建MAXTSIZE个链表
- void LoList(Like *E); //向链表中写入数据
- void PutAList(Like *E); //确认链表是否创建成功
- void LoList(Like *E) //向链表中写入数据
- {
- Like *temp = E->next; //把循环链表的头节点传给临时变量
- for(int i = 0; i < MAXTSIZE; i++) //一共就插入MAXTSIZE个数据
- {
- if(i != 0) //加一个判断不然开始时不执行
- {
- for(int j = 0; j <= i; j++) //向后循环i个节点
- {
- temp = temp->next;
- if(temp->T != 0)
- {
- j--; //本算法的误区在于循环中把已有数据的节点也算在里面了,如果有数据就略过
- }
- }
- }
- temp->T = i + 1; //在本节点中插入数据
- PutAList(E); //调试
- }
- }
- void PutAList(Like *E)
- {
- Like *temp = E->next ;
- do
- {
- printf("<%d>", temp->T);
- temp = temp->next;
- }while(E->next != temp);
- putchar('\n');
- }
- void GetList(Likes *E)
- {
- Like *temp, *tail;
- for(int i = 0; i < MAXTSIZE; i++)\
- {
- temp = (Likes )malloc(sizeof(Like ));
- temp->T = 0;
- temp->next = (*E)->next;
- if((*E)->next == *E)
- {
- (*E)->next = temp;
- }
- else
- {
- tail->next = temp;
- }
- tail = temp;
- }
- }
- void InitList(Likes *E)
- {
- if(*E != NULL)
- {
- Like *temp = (*E)->next, *temps;
- do
- {
- temps = temp;
- temp = temp->next;
- free(temps);
- }while(temp != NULL);
- }
- else
- {
- *E = (Likes )malloc(sizeof(Like ));
- }
- (*E)->next = *E;
- }
- int main()
- {
- Like *F = NULL;
- InitList(&F);
- GetList(&F);
- LoList(F);
- return 0;
- }
复制代码 |
|