void DispList(Lnode *L){ Lnode* p=L->next; while(p!=NULL){ printf("%d",p->data); p=p->next; } printf("\n"); }
时间: 2024-04-14 20:28:42 浏览: 14
这段代码是一个函数,名为 DispList,用于输出链表的元素值。它接受一个指向链表头结点的指针 L函数中的循环遍历链表的个节点,从头结点的下一个节点开始,直到遍历到链表末尾(即指针 p 指向 NULL)。在循环中,首先使用 printf 函数输出当前节点的数据值 p->data,然后将指针 p 移动到下一个节点 p->next。最后,在循环结束后,使用 printf 函数输出一个换行符,以便输出结果的格式化。
总体来说,这个函数的作用是将链表中的元素值依次输出到屏幕上,并在最后换行。
相关问题
//初始化单链表 bool InitList(Lnode *L){ L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL; if(L==NULL)//内存不足,头结点无法分配到空间 return false; return true; } //(头插法)创建单链表 void CreateListF(Lnode *L,ElemType a[],int n){ Linklist s; L=(Lnode*)malloc(sizeof(Lnode)); L->next=NULL; int j=-0; for(j=0;j<n;j++){ s=(Lnode *)malloc(sizeof(Lnode)); s->data=a[j]; s->next=L->next; L->next=s; } } /* //(尾插法)创建单链表 void CreateListR(Lnode *L,ElemType a[],int n){ Linklist s, r; L=(Lnode*)malloc(sizeof(Lnode)); r=L; int i=0; for(i=0;i<n;i++){ s=(Lnode*)malloc(sizeof(Lnode)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } //判断链表是否为空 bool ListEmpty(Lnode *L){ return (L->next==NULL); } */ //输出链表 void DispList(Lnode *L){ Lnode* p=L->next; while(p!=NULL){ printf("%d",p->data); p=p->next; } printf("\n"); }
这段代码中包含了几个函数用于处理单链表。
1. `bool InitList(Lnode *L)`: 这个函数用于初始化单链表。它接受一个指向链表头结点的指针 L。在函数内部,它首先分配一个头结点的内存空间,并将其地址赋给 L。然后,将头结点的指针域 L->next 设置为 NULL,表示链表为空。最后,如果分配内存失败,返回 false;否则,返回 true。
2. `void CreateListF(Lnode *L,ElemType a[],int n)`: 这个函数使用头插法创建单链表。它接受一个指向链表头结点的指针 L,一个元素数组 a,以及元素个数 n。在函数内部,它首先分配一个头结点的内存空间,并将其地址赋给 L。然后,使用循环将数组中的元素依次插入到链表的头部。具体操作是:分配一个新节点 s,并将数组中的元素赋值给 s->data;然后,将新节点 s 插入到头结点之后,即 s->next = L->next,L->next = s。最后,循环结束后,完成链表的创建。
3. `void DispList(Lnode *L)`: 这个函数用于输出链表的元素值。它接受一个指向链表头结点的指针 L。在函数内部,它使用循环遍历链表的个节点,从头结点的下一个节点开始,直到遍历到链表末尾(即指针 p 指向 NULL)。在循环中,首先使用 printf 函数输出当前节点的数据值 p->data,然后将指针 p 移动到下一个节点 p->next。最后,在循环结束后,使用 printf 函数输出一个换行符,以便输出结果的格式化。
需要注意的是,代码中还有一些被注释掉的函数,包括 `CreateListR` 和 `ListEmpty`。这些函数分别用于使用尾插法创建单链表和判断链表是否为空。由于这些函数被注释掉了,所以在代码中并不会被调用到。
#include <stdio.h> #include <malloc.h> typedef int ElemType; struct shuju { ElemType xishi; ElemType zhishu; } ; typedef struct LNode { struct shuju data ; struct LNode *next; } LinkNode; void CreateListR(LinkNode *&L ,int a[][2] ,int n); void DispList(LinkNode *L) { LinkNode *p=L->next; if(p->data.xishi == 0) { p=p->next; } else if(p->data.zhishu==0) { printf("%d",p->data.xishi); p=p->next; } else { printf("%dX^%d",p->data.xishi,p->data.zhishu); p=p->next; } while (p!=NULL) { if(p->data.xishi > 0) { if(p->data.zhishu == 1) { printf("+%dX",p->data.xishi); p=p->next; } printf("+%dX^%d",p->data.xishi,p->data.zhishu); p=p->next; } else if(p->data.xishi < 0) { printf("%dX^%d",p->data.xishi,p->data.zhishu); p=p->next; } else { p=p->next; } } printf("\n"); } void mer(LinkNode *la,LinkNode *lb,LinkNode *&lc) { LinkNode *p,*q,*pre; lc=la; pre=la; p=la->next; q=lb->next; while(p!=NULL &&q!=NULL) { if(p->data.zhishu == q->data.zhishu) { p->data.xishi += q->data.xishi; pre=p; p=p->next; q=q->next; } else if(p->data.zhishu < q->data.zhishu) //判断a小于b,把a存入指针lc指向的链表 { pre=p; p=p->next; } else //a>b,把b存入lc所指向的链表 { pre->next=q; pre=q; q=q->next; pre->next=p; } } if(q!=NULL) //链表结束 { pre->next=q; } } int main() { LinkNode *la,*lb,*lc; int i,j,z; int a[i][2],b[j][2]; printf("请输入多项式A的相数:"); scanf("%d",&i); for(z=1;z<=i;z++) { printf("输入第%d项的系数和指数:",z); scanf("%d %d",&a[z-1][0],&a[z-1][1]); } CreateListR(la,a,i); DispList(la); printf("\n"); printf("请输入多项式B的相数:"); scanf("%d",&j); for(z=1;z<=j;z++) { printf("输入第%d项的系数和指数:",z); scanf("%d %d",&b[z-1][0],&b[z-1][1]); } CreateListR(lb,b,j); DispList(lb); printf("\n"); mer(la,lb,lc); DispList(lc); } void CreateListR(LinkNode *&L ,int a[][2] ,int n) { LinkNode *s,*r; L=(LinkNode *)malloc(sizeof(LinkNode)); L->next=NULL; r=L; for (int i=0;i<n;i++) { s=(LinkNode *)malloc(sizeof(LinkNode)); s->data.xishi=a[i][0]; s->data.zhishu=a[i][1]; r->next=s; r=s; } r->next=NULL; }算法设计说明
这段代码是一个多项式加法的实现。主要包括三个函数:CreateListR、DispList和mer。其中CreateListR函数用于创建一个带头结点的单链表,存储多项式的系数和指数;DispList函数用于输出一个多项式;mer函数用于将两个多项式进行相加,结果存储在第三个链表中。整个程序的流程是先输入两个多项式,然后分别创建对应的链表,最后进行相加操作,输出结果多项式。