数据结构(C语言)求解答 求大侠解答程序含义,尽量讲解详细些,我是初学者

#include<stdio.h>
typedef struct node{
int data;
struct node *next;}Lnode;
Lnode *create(int tag)
{ Lnode *p,*h=NULL;
int x;
printf("input x:");
scanf("%d",&x);
while(x!=tag)
{ p=(Lnode*)malloc(sizeof(Lnode));
p->data=x;
p->next=h;
h=p;
scanf("%d",&x);
}
return h;
}
void printd(Lnode *h)
{ while(h)
{printf("%d ",h->data);
h=h->next;
}
}
Lnode *revelist(Lnode *h)
{ Lnode *p,*q=NULL;
while(h)
{p=h->next;
h->next=q;
q=h;
h=p;}
return q;
}
void main()
{Lnode *ha,*hb;
int tag;
printf("\n input endtag=");
scanf("%d",&tag);
ha=create(tag);
printf("This list is:\n");
printd(ha);
ha=revelist(ha);
printf("\nrevelist is:\n");
printd(ha);
getch();
}

#include<stdio.h>
typedef struct node{
int data;
struct node *next;}Lnode;

Lnode *create(int tag)//创建链表, tag作为创建结束标志,是你要传入的数值
{ Lnode *p,*h=NULL;
int x;
printf("input x:");
scanf("%d",&x);
while(x!=tag) //如果x 不等于tab就为节点分配内存
{ p=(Lnode*)malloc(sizeof(Lnode));//为节点分配内存
p->data=x; //将x放入到节点中
p->next=h; //指向下一个节点,第一次创建h为空,此时正好作为链表结束的标志。此后,这
//将表示在头结点次插入节点。
h=p;//将新的节点p作为第一个节点
scanf("%d",&x);//再次输入要插入节点的值
}
return h;
}
void printd(Lnode *h)//这个是打印链表的值,输入的参数是第一个节点
{ while(h)
{printf("%d ",h->data);
h=h->next;
}
}
Lnode *revelist(Lnode *h)//将链表逆序,传入的参数为链表的第一个节点
{ Lnode *p,*q=NULL;
while(h)
{p=h->next;
h->next=q;
q=h;
h=p;}
return q;
}
void main()
{Lnode *ha,*hb;
int tag;
printf("\n input endtag=");
scanf("%d",&tag);//输入创建键表的结束标志
ha=create(tag);//创建链表
printf("This list is:\n");
printd(ha);//打印链表
ha=revelist(ha);//对链表作逆序处理
printf("\nrevelist is:\n");
printd(ha);//再次打印链表

getch();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-08
首先输入一个数tag,表示以这个数为结尾建立链表,然后输入一串数建立链表直至你输入数tag表示结束。接下来输出链表。然后反转链表,再输出链表。
第2个回答  2012-05-04
#include<stdio.h>
typedef struct node{
int data;
struct node *next;}Lnode;/*定义一个结构体来存储链表的数值域和指针域
Lnode *create(int tag)/*创建链表
{ Lnode *p,*h=NULL;/*h存放的是头节点,p用于创建新的节点
int x;
printf("input x:");
scanf("%d",&x);
while(x!=tag)/*循环输入数值创建链表
{ p=(Lnode*)malloc(sizeof(Lnode));/*创建一个node结构体类指针
p->data=x;
p->next=h;/*这部分在纸上画图来容易理解
h=p;
scanf("%d",&x);
}
return h;/*返回链表的头节点
}
void printd(Lnode *h)
{ while(h)
{printf("%d ",h->data);取节点值
h=h->next;/*循环地向下一个节点递推
}
}
Lnode *revelist(Lnode *h)/*这一部分实现将原先的头节点转至尾节点,目的是为了实现逆向输出链表
{ Lnode *p,*q=NULL;
while(h)
{p=h->next;
h->next=q;
q=h;
h=p;}
return q;
}
void main()
{Lnode *ha,*hb;
int tag;/*这个标志退出输入功能
printf("\n input endtag=");
scanf("%d",&tag);
ha=create(tag);
printf("This list is:\n");
printd(ha);
ha=revelist(ha);
printf("\nrevelist is:\n");
printd(ha);
getch();
}

链表部分还是要你自己多画图思考比较容易理解,这样没图说不明白的。
第3个回答  2012-05-04
这是链表的实现。
结构体是链表的节点。
链表的关键是节点的理解,具体百度吧。

严蔚敏 的 《数据结构(C语言版)》 这本书在豆瓣评分为什么不高?_百度...
总的来说,严蔚敏的《数据结构(C语言版)》在豆瓣评分上的不高,更多是由于学习者的个人差异和对C语言基础的要求,而非书籍本身的质量。通过适当的准备和学习方法,这本书依然可以成为学习数据结构的有效资源。

C语言好学吗谢谢了,大神帮忙啊
第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os\/2,没有一个里外的,如果你不懂C...

如何学好C语言?
使用顺带提一下,很多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准几乎没有支持,其二是TC 2.0编译得到的程序是16位的,这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西可以使TC 2.0编译出32位程序,不过那过于复杂了)。 等你学完一本C语言的教材,...

如何学习C语言?
1、课前预习,课后复习,认真做课堂、课后的作业,理解理论知识。2、记住语法规则。3、加强逻辑思维。4、多动手,通过练习上机了解它的运行过程。5、实践—>理论—>再实践,刚开始学习C语言时,按示例练习,并推动理论的学习,然后再自己多思考,多上机实践。

c语言和c++谁好,他没有什么区别?
C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(...

求C语言项目视频教程
在别的地方获取这个值,若是有个数据结构的基础,基本上C也就是这样了。举个例子,手机有个history机制用于实现在接到异步事件来了并且执行之后返回到该事件未来时的状态,比如你正在用手机看小说,现在有个电话来了,你接了电话并且挂断后,会返回到你之前看小说的位置,这就是用一个栈实现的,电话来...

全国计算机等级考试二级C,VB等等不同语言笔试部分的公共基础知识考试内 ...
第一章 数据结构与算法经过对部分考生的调查以及对近年真题的总结分析,笔试部分经常考查的是算法复杂度、数据结构的概念、栈、二叉树的遍历、二分法查找,读者应对此部分进行重点学习。详细重点学习知识点:1.算法的概念、算法时间复杂度及空间复杂度的概念2.数据结构的定义、数据逻辑结构及物理结构的定义3.栈的定义及其...

如何学习C语言
答曰:读程序。没错,读程序是学习C语言入门最快,也是最好的方法。如同我,现在学习新的J#,C#等其他语言,不再是抱着书本逐行啃,而是学习它们的例程。当然,对于没有学过任何计算机语言的初学者,最好还是先阅读教程,学习完每一章,都要认真体会这一章的所有概念,然后不放过这一章中提到的所有例程,然后仔细研读程序,...

相似回答