|
发表于 2016-5-31 15:15:31
|
显示全部楼层
本楼为最佳答案
- /*初始化循环链表*/
- void ds_init(node **pNode)//对结点的值初始化,*pNode是对结点的引用,是指针类型的变量,**pNode是*pNode所指向的变量的值
- //也就是那个结构体定义的结点
- {
- int item;
- node *temp;
- node *target;
- printf("输入结点的值,输入0完成初始化\n");
- while(1)
- {
- scanf("%d", &item);
- fflush(stdin);
- if(item == 0)
- return;
- if((*pNode) == NULL)//初始化第一个结点,*pNode是指针类型变量,指向的是第一个结点,第一个结点空执行if里面的
- {
- *pNode = (node*)malloc(sizeof(struct CLinkList));//为指向的结点分配空间
- if(!(*pNode))//如果分配不成功,退出
- exit(0);
- (*pNode)->data = item;//如果分配成功,则赋值给data域
- (*pNode)->next = *pNode;//首尾相连
- //这时候还只有一个结点
- }
- else
- {
- //已经有结点了
- /*找到next指向第一个结点的结点*/
- for(target = (*pNode); target->next != (*pNode); target = target->next)
- ;
- //进行第一步的时候target指向的就是if里面生成的那第一个结点
- //这句for循环后面有逗号,表示条件不满足了才继续往下执行
- /*生成一个新的结点*/
- temp = (node *)malloc(sizeof(struct CLinkList));
- if(!temp)
- exit(0);
- temp->data = item;
- temp->next = *pNode;//把新生成的结点接在原来的结点前面
- target->next = temp;//target指向的是原来的结点,现在把原来结点的next域指向新生成的结点,相当于又成了循环链表
- }
- }
- }
复制代码 |
|