2 huoche27 Huoche27 于 2016.04.27 19:44 提问

C语言成语求代码标注~刚刚学习了线性表~~新手小白~~求带~~~谢谢各位大神

刚刚学习了数据结构~然后老师给了一个线性表的C程序,,然后好多地方看不懂·~~~希望哪位大神帮我把每条代码的意思标注一下~~~谢谢~~~

#include
#include

typedef struct Node
{
struct Node *next;
int value;
}Node, *List;

List merge(List a, List b)
{
Node *p, *pa, *pb, *prea;
if(a == NULL || b == NULL) 0;

p = a;
prea = a;
pa = a->next;
pb = b->next;
while(pa && pb)
{
    if(pa == pb)
    {
        pb = NULL;
        break;
    }
    else if(pa->value > pb->value) 

    {
        prea->next = pb;
        pb = pb->next;
        prea = prea->next;
        prea->next = pa;
    }
    else
    {
        if(pa->next == pb->next)
        {
            pb->next = NULL;
        }
        prea = pa;
        pa = pa->next;
    }
}

prea->next = pa ? pa : pb;
return p;

}

void print(List a)
{

Node *p = a->next;
if(!a) return;
while(p)
{
    printf("%d ", p->value);
    p = p->next;
}
putchar('\n');

}

List getList(int a[], int len)
{
int i;
Node head = (Node)malloc(sizeof(Node));
Node p = head;
head->next = NULL;
for(i = 0; i < len; i++)
{
Node *n = (Node
)malloc(sizeof(Node));
n->value = a[i];
p->next = n;
p = n;
}
p->next = NULL;
return head;
}

int main(int argc, char *argv[])
{
{

int a[] = {1, 2, 3, 4};
int b[] = {0, 1, 5};
List la = getList(a, 4);
List lb = getList(b, 3);
print(la);
print(lb);
print(merge(la, lb));

}
printf("---------------\n");
{

int a[] = {0, 0, 0, 0};
int b[] = {0};
List la = getList(a, 4);
List lb = getList(b, 1);
lb->next->next = la->next->next;
print(la);
print(lb);
print(merge(la, lb));

}
{

int a[] = {0, 1, 3, 40};
int b[] = {0};
List la = getList(a, 4);
List lb = getList(b, 1);
lb->next->next = la->next->next->next;
print(la);
print(lb);
print(merge(la, lb));

}

return 0;

}

1个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.27 20:59

这种链表的注释不一定能给楼主讲清楚,如果楼主指针学的不错倒是可以
第一次学链表的话肯定要结合图来看
举两句的例子:
prea->next = pb; //prea的next指针指向了pb
pb = pb->next; //pb指向了它的next指针指向的节点,即pb指向了下一个节点
如果楼主听不懂的话,建议找个人面对面问问

Huoche27
Huoche27 奥~~~~谢谢哈~~~~~~~
大约 2 年之前 回复
qq423399099
qq423399099 回复Huoche27: 同样是next,但有时候代表的是节点,有时候代表的是某个节点的next指针。有个小技巧:一般作为左值的通常都是某个节点的next指针,而作为右值的则通常表示的是某个节点
大约 2 年之前 回复
qq423399099
qq423399099 回复Huoche27: 因为lb是有头结点的并且只有一个节点,lb->next指向的是第一个节点,lb->next->next代表的是第一个节点的next指针,而la->next->next->next代表la的第三个节点,所以效果就是lb原来是只有一个节点的,现在它变成3个节点了
大约 2 年之前 回复
Huoche27
Huoche27 最后是使lb的next的next值等于la的next的next的next吗??
大约 2 年之前 回复
Huoche27
Huoche27 lb->next->next = la->next->next->next
大约 2 年之前 回复
Huoche27
Huoche27 像你举的这个例子还可以懂~但这句呢?就不太懂了
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
一张C++学习路线图告诉你,从小白到大神你都需要掌握什么技能。
提起c语言,很多人都说c语言属于比较难的编程语言,但是一些大型项目设计高复杂度和高要求的项目的时候,c语言还是有很大优势,例如互联网搜索引擎,高性能科学计算,大型网络游戏服务器等等。那么该如何着手学习c语言呢,我整理了一套系统的学习方案,只要按照这套学习方案进行学习,一定可以学有所成。如果大家对于学习C++有任何问题,学习方法,学习路线,如何学习有效率的问题,可以随时来咨询我,或者缺少系统学习资料...
c语言初步经典题8--求一个数的各位值
题目:写一个程序,输入x(三位数),输出其个、十、百位,用空格隔开 样例输入:768 样例输出:8 6 7#include <stdio.h> #include <stdlib.h>int main() { unsigned short num; unsigned char temp;//保存每一位的数 int i; printf("请输入要分离位数的整数:")
新手入门,学习java从小白到大神应该从何做起?
编程入门先学什么?关于编程,关于编程的基础语言,想要学习的朋友,一定会多多少少了解一些。像 C、C++、Python和Java四种都是通用的编程语言,而JavaScript和PHP算是Web环境的专用编程语言。但其实,编程的语言有很多种,想要入门编程,要学习的编程语言也很多。在这里我就简单总结下编程入门的一系列学习方法。        上面我们提到,学习编程的语言有很多种,像C、C++、Pyth
C语言之基本算法30—数组的灵活应用(一个正整数的各位数字平方和)
//数组的灵活应用! /* ===================================================== 题目:求任意输入一个正整数各位数字的平方和,显示如下: 如输入1234,则显示 1*1+2*2+3*3+4*4=30 ===================================================== */
适合C/C++初学者阅读的源码
学编程语言还是要读源码,看看ChinaUnix上的推荐。老手也一样可以学到东西。导读:   QUOTE:   原帖由 huaxue于 2006-9-26 22:09 发表   可以提供STL的源代码地址么   ^_^谢谢   http://www.research.att.com/~bs/ C++老巢   http://www.research.att.com/~bs/C++.html 有关C+
三位数的各位数字之和
#include int main() {    int x,a,b,c,sum=0; printf("请输入一个三位正整数:");    scanf("%d",&x);    a=x/100;    b=(x%100)/10;    c=x%10;    sum=a+b+c;    printf("这个三位数的各位数字之和为:%d\n",sum);
入门程序员——从小白到大神
新人自传
c语言数据结构之顺序线性表的合并、并集
//#include &quot;list_test.c&quot; //#include &quot;link_list_test.c&quot; #include &quot;List.h&quot; #include &quot;LinkList.h&quot; #include &quot;utils.c&quot; void MergeList(const List * l1,const List * l2,List * l3); void list_union(List * ...
求正整数各位数字之和
求正整数各位数字之和 时间复杂度
C语言基础(新手)---贪吃蛇代码参考交流~~~
本人小白,欢迎逛楼大佬指导和交流。现阶段只在15pb学习C语言(c++),所以代码都是C语言(注释也是比较多.....)。写贪吃蛇的时候还不熟悉c++的类的部分,也没有分装文件,所以直接就是按C语言的意思直接写上// snake.cpp : 定义控制台应用程序的入口点。 // #include &quot;stdafx.h&quot; #include &amp;lt;iostream&amp;gt; #include &amp;lt;w...