今天给各位分享遍历链表c语言版的知识,其中也会对c++遍历链表进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、数据结构链表遍历C语言2、C语言数据结构与算法:链表3、c语言遍历链表问题4、用C语言编写程序建立链表结构体类型实现链表初始化遍历和插入算法5、用C语言实现对单链表的基本操作
数据结构链表遍历C语言
1、单链表中头结点有两个作用:一是标识该链表的存在,而是可以通过头结点遍历整个链表。所以不能通过移动头结点指针遍历链表,因为一旦移动了,下次就无法定位该链表。
2、例程:
#include “stdio.h”
#include “stdlib.h”
#define NULL 0
#define Error 0
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreatList(LinkList,int);
LinkList CreatList(LinkList L,int n)
{
LinkList p;
int i;
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(i=n;i0;–i){
p=(LinkList)malloc(sizeof(LNode));
scanf(“%d”,p-data);
p-next=L-next;
L-next=p;
}
return L;
}
void Getelem(LinkList L)
//遍历链表
{
LinkList q;
q=L-next;
for(q-next;q;q=q-next)
printf(“%d”,q-data);
}
void main(){
LinkList L;
int a;
puts(“请输入链表长度:”);
scanf(“%d”,a);
L=CreatList(L,a); //L要接收函数返回指针
Getelem(L);
}
C语言数据结构与算法:链表
先搞清楚基本概念,不懂再问
// 返回一个带头结点的且具有五个结点的链表
link *initLink()
{
link * p=(link*)malloc(sizeof(link)); // 创建头结点
link * temp=p; // 使用变量temp在下面创建结点时指向链表末端
for(int i=1; i5; i++)
{
link *a=(link*)malloc(sizeof(link)); // 创建一个结点
a-elem=i; // 为结点赋值
a-next=NULL; // 指针域暂时赋为NULL,若后面还要创建结点的话再修改
temp-next=a; // 因为temp指向链表末端,即最后一个结点
// 故该节点指针域应指向刚才创建的结点 a
temp=temp-next;// 连接好以后,temp指向下一个结点(刚才创建的结点a,现在是链表末端)
}
return p; // 返回头结点
}
c语言遍历链表问题
B通过的条件是B不为空,既B的值不是0x000000。。只要满足这个,B都可以进行循环。
通常的错误,B虽然已经释放的空间,但是并没有赋给它0x0000000导致B成为野指针,野指针可以通过!=NULL的判断,但是他的空间是不能操作的。
用C语言编写程序建立链表结构体类型实现链表初始化遍历和插入算法
#include stdio.h
#include stdlib.h
#define telemtype char
#define ok 1
#define error 0
#define overflow -1
typedef int status;
typedef struct bitnode
{
telemtype data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void preordertraverse(bitree T)
{
if(T)
{
printf(“%c “,T-data);
preordertraverse(T-lchild);
preordertraverse(T-rchild);
}
}
status createbitree(bitree T)
{
int ch;
ch=getchar();
if(ch==’ ‘)
T=NULL;
else
{
if(!(T=(bitnode*)malloc(sizeof(bitnode))))
exit(overflow);
T-data=ch;
createbitree(T-lchild);
createbitree(T-rchild);
}
return ok;
}
void prinbtree(bitree T)
{
if(T!= NULL)
{
printf(“%c”, T-data);
if(T-lchild!=NULL||T-rchild!=NULL)
{
printf(“(“);
prinbtree(T-lchild);
if(T-rchild!=NULL)
{
printf(“,”);
}
prinbtree(T-rchild);
printf(“)”);
}
}
}
int main()
{
bitree T=NULL;
printf(“先序输入二叉树:\n”);
createbitree(T);
printf(“先序遍历二叉树为:\n”);
preordertraverse(T);
printf(“\n”);
prinbtree(T);
printf(“\n”);
return 0;
}
我写的,希望对你有用!
用C语言实现对单链表的基本操作
#include stdio.h
#include stdlib.h
typedef int DataType;
typedef struct node {
DataType member;
struct node *next;
}*LinkList, *pNode;
// 初始化链表
LinkList GetEmptyList() {
LinkList head = (pNode)malloc(sizeof(struct node));
head-member = 0;
head-next = NULL;
return head;
}
// 在非增链表中插入结点
void InsertNode(LinkList head, DataType x) {
pNode p,q;
for(p = head; p-next != NULL; p = p-next) {
if(p-next-member = x) {
q = (pNode)malloc(sizeof(struct node));
q-member = x;
q-next = p-next;
p-next = q;
return;
}
}
q = (pNode)malloc(sizeof(struct node));
q-member = x;
q-next = p-next;
p-next = q;
}
// 新结点插入为首结点
void PushNode(LinkList head, DataType x) {
pNode p = (pNode)malloc(sizeof(struct node));
p-member = x;
p-next = head-next;
head-next = p;
}
// 删除结点
int DeleteNode(LinkList head, DataType x) {
pNode p,q;
for(p = head; p != NULL; p = p-next) {
if(p-next-member == x) {
q = p-next;
p-next = q-next;
free(q);
return 1; // 成功删除member(第一个)为x的结点
}
}
return 0; // 没有找到member为x的结点
}
// 查找结点
int FindNode(LinkList head, DataType x) {
pNode p;
for(p = head-next; p != NULL; p = p-next) {
if(p-member == x) return 1; // 找到了
}
return 0; // 没有找到
}
// 销毁链表
void DestroyList(LinkList head) {
pNode q,p = head;
while(p) {
q = p;
p = q-next;
free(q);
}
head = NULL;
}
// 遍历链表
void ShowList(LinkList head) {
pNode p = head-next;
while(p != NULL) {
printf(“%d “,p-member);
p = p-next;
}
printf(“\n”);
}
int main() {
DataType x,res;
LinkList head = GetEmptyList();
printf(“输入一个整数(‘q’ to quit): “);
while(scanf(“%d”,x) == 1) {
InsertNode(head, x); // 创建非增链表
printf(“输入一个整数(‘q’ to quit): “);
}
fflush(stdin);
ShowList(head);
printf(“输入待查找的整数: “);
scanf(“%d”,x);
res = FindNode(head, x);
if(res) printf(“找到了。\n”);
else printf(“没找到!\n”);
printf(“输入待删除的整数: “);
scanf(“%d”,x);
res = DeleteNode(head, x);
if(res) printf(“成功删除。\n”);
else printf(“没找到数据为:%d的结点!\n”,x);
ShowList(head);
DestroyList(head);
return 0;
}
遍历链表c语言版的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c++遍历链表、遍历链表c语言版的信息别忘了在本站进行查找喔。