黑马程序员技术交流社区
标题:
关于链表的一段小程序 求解释啊 看不懂
[打印本页]
作者:
格子、
时间:
2014-6-3 13:23
标题:
关于链表的一段小程序 求解释啊 看不懂
这事一份操作单链表的小程序,看着很糊涂,求明白的打什么讲解一下啊,想注释一下都不知道怎么注释!!!
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}listnode, *linklist;
linklist linklist_create(int n)
{
int i;
linklist H, p, q;
H = (linklist)malloc(sizeof(listnode));
if (H == NULL)
{
printf("malloc error\n");
return H;
}
H->data = 1;
H->next = H;
p = H;
i = 2;
while (i <= n)
{
q = (linklist)malloc(sizeof(listnode));
if (q == NULL)
{
printf("malloc error\n");
return q;
}
q->data = i;
p->next = q;
q->next = H;
p = q;
i++;
}
return H;
}
void linklist_show(linklist H)
{
linklist p = H;
while (p->next != H)
{
printf("%d ", p->data);
p = p->next;
}
printf("%d\n", p->data);
}
int jose(linklist H, int k, int m)
{
int i = 0;
linklist p = H, q;
while (i < k-1)
{
p = p->next;
i++;
}
printf("%d\n", p->data);
while (p->next != p)
{
i = 0;
while (i < m-2)
{
p = p->next;
i++;
}
q = p->next;
p->next = q->next;
printf("%d ", q->data);
free(q);
q = NULL;
p = p->next;
}
printf("%d\n", p->data);
}
int main()
{
linklist H;
H = linklist_create(8);
linklist_show(H);
jose(H, 3, 4);
return 0;
}
复制代码
作者:
huangqiwa
时间:
2014-6-4 12:32
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}listnode, *linklist;
//定义一个节点,实际上就是一个结构体
//里面包含了一个int 类型的data和一个指向该结构体类型的指针
linklist linklist_create(int n)//这个函数的功能是创建一个链表,参数int 是需要创建节点的个数
{
int i;
linklist H, p, q; 定义了三个节点指针
H = (linklist)malloc(sizeof(listnode));//分配节点内存并且把地址赋给H指针,也就是头节点
if (H == NULL)
{
printf("malloc error\n");
return H;
}
H->data = 1;//结构体赋值
H->next = H;//将下一个指针指向自己
p = H;//当前指针也指向自己
i = 2;
while (i <= n)//这个循环就重复创建节点,并且把节点插入到当前链表中
{
q = (linklist)malloc(sizeof(listnode));
if (q == NULL)
{
printf("malloc error\n");
return q;
}
q->data = i;
p->next = q;
q->next = H;
p = q;
i++;
}
return H;
}
void linklist_show(linklist H)//遍历整个链表,并且打印出来data的值
{
linklist p = H;
while (p->next != H)
{
printf("%d ", p->data);
p = p->next;
}
printf("%d\n", p->data);
}
int jose(linklist H, int k, int m)//这个不知道是在做什么,大神指点!
{
int i = 0;
linklist p = H, q;
while (i < k-1)
{
p = p->next;
i++;
}
printf("%d\n", p->data);
while (p->next != p)
{
i = 0;
while (i < m-2)
{
p = p->next;
i++;
}
q = p->next;
p->next = q->next;
printf("%d ", q->data);
free(q);
q = NULL;
p = p->next;
}
printf("%d\n", p->data);
}
PS:另外jose这个函数最后少了一个return 0;
int main()
{
linklist H;
H = linklist_create(8);
linklist_show(H);
jose(H, 3, 4);
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2