C语言,计算链表中元素节点个个数
楼主你好~
很简单哦
int
count
=
0;
while(p
!=
NULL)
{
p
=
p->next;
count++;
}
这个count就是最终的结点个数(包括头结点)~
请追问~
#include
#include
typedef struct node
{
int data;
struct node *next;
}node;
void count(node* l)//计算节点个数,输出所有值
{
int n = 0;
node* p = l->next;
while(p)
{
printf("%d ",p->data);
p = p->next;
n++;
}
printf("
%d
",n);
}
int main()
{
int e;
//头节点
node *head,*p,*q;
head = (node*)malloc(sizeof(node));
head->next = NULL;
p = head;
printf("输入元素,回车结束:");
do{
scanf("%d",&e);
q = (node*)malloc(sizeof(node));
q->data = e;
q->next = NULL;
p->next = q;
p = q;
}while(getchar()!='
');
count(head);
return 0;
}
#include <stdio.h>
#define elemType int
#define status int
#define OVERFLOW -1
#define ERROR 0
#define OK 1
/* 单链表数据结构 */
typedef struct lNode {
elemType data;
struct lNode *next;
} lNode, *linkList;
/* 初始化 */
/* 操作结果:构造一个空的单链表L */
void initList (linkList *L) {
*L = (linkList) malloc (sizeof (struct lNode)); /* 产生头节点,并使L指向此头节点 */
if(!*L) /* 内存分配失败 */
exit (OVERFLOW);
(*L)->next = NULL; /* 指针域为空 */
}
/* 单链表指定位置插入新元素 */
/* 操作结果:在带头结点的单链表L中第i个位置之前插入元素e */
status listInsertNode (linkList L, int i, elemType e) {
int j=0;
linkList p=L,s;
while (p && j<i-1) { /* 寻找第i-1个结点 */
p = p->next;
j++;
}
if (!p || j>i-1) /* 插入位置不合理:i小于1或者大于表长 */
return ERROR;
/* 生成新结点,并插入L中 */
s = (linkList) malloc (sizeof (struct lNode));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
/* 获取单链表长度 */
/* 初始条件:单链表L已存在。操作结果:返回L中数据元素个数 */
int listLength (linkList L) {
int i = 0;
linkList p = L->next; /* p指向第一个结点 */
while (p) { /* 没到表尾 */
i++;
p=p->next;
}
return i;
}
int main (void) {
linkList L;
elemType *e;
initList (&L);
/*插入3个元素*/
listInsertNode (L, 1, 1);
listInsertNode (L, 1, 2);
listInsertNode (L, 1, 3);
printf ("listLength:%d
",listLength (L));
return 0 ;
}
运行结果
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;/*输出链表中结点的数据域值*/
void PrintList(LinkList Head)
{
LinkList p;
p=Head->next;
while(p!=NULL)
{
printf("==>%d",p->data);
p=p->next;/* 指针后移 */
}
printf("\n");
}/*构造单链表*/
CreateList(LinkList *Head)
{
LNode *last;
LNode *newnode;
int datavalue; *Head=(LinkList)malloc(sizeof(LNode)); if(*Head==NULL)
printf("Memory allocate failure!!\n");
else
{
last=*Head;
printf("请输入单链表(以0结束):");
scanf("%d",&datavalue);
while(datavalue>0)
{
newnode=(LinkList)malloc(sizeof(LNode));
newnode->data=datavalue;
last->next=newnode;
last=newnode;
scanf("%d",&datavalue);
}
newnode->next=NULL;
}
}int ListLength(LinkList L)
{
int i =0;
LinkList p=L->next;
while(p)
{
i++;
p=p->next;
}
return i;
} void main()
{
int i,a,b,e;
LinkList Head,p,q,r;
Head=NULL;
CreateList(&Head);
if(Head!=NULL)
{
printf("单链表是:\n");
PrintList(Head);
} getchar();
a=ListLength(Head);
printf("单链表的线长度为:%d\n",a);
}
楼主你好~
很简单哦
int count = 0;
while(p != NULL)
{
p = p->next;
count++;
}
这个count就是最终的结点个数(包括头结点)~
请追问~
这个主要的部分不难 如果是有终点的链表则只要设置条件p!=null循环,循环体内指针后移并且计数器自加,跳出循环时计数器记录的就是它的结点数如果是循环链表那么就记录一下起点,比对内容来作为循环条件
很简单哦
int count = 0;
while(p != NULL)
{
p = p->next;
count++;
}
这个count就是最终的结点个数(包括头结点)~
2、1.根据一维数组a[n]建立单链表,使单链表中元素的次序与a[n]中元素...
};int main(){ int i;int a[10] = {0,1,2,3,4,5,6,7,8,9};for(i = 0; i < 10; i++){ printf("%d ", a[i]);} printf("\\n");struct sqlist *head, *p, *q;head = (struct sqlist *)malloc(sizeof(struct sqlist));p = head;\/\/带头结点的链表,头结点不存储...
c语言实现头插法创建包含5各节点的单链表,输出链表中的最后一个元素
for(i=0;i<5;i++){ p=(L *)malloc(sizeof(L));p->x=i;p->next=head->next; \/\/用头插法插入节点 也就是说顺序颠倒 head->next=p;} p=head->next;while(1){ p=p->next;if(p->next==NULL){ printf("最后的元素:%d\\n",p->x);break;} } } ...
C语言算法链表学生系统
链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。
如何用类c语言计算带头结点的单链表中的节点个数
include<stdio.h> include<stdlib.h> typedef struct node { int data;struct node *next;}node;void count(node* l)\/\/计算节点个数,输出所有值 { int n = 0;node* p = l->next;while(p){ printf("%d ",p->data);p = p->next;n++;} printf("\\n%d\\n",n);} int main(){...
求c语言链表的详细讲解
图中以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称为"结点",每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址.课以看出,head指向第一个元素;第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为'表尾",它的地址部分...
谁帮忙写个c语言链表的插入函数,void Insert(LinkList*L,int i,in...
void Insert(LinkList *L,int i,int e){ LinkList *p,*q,*t;t=(LinkList*)malloc(sizeof(LinkList));t->data=e;t->next=NULL;p=L;q=NULL;while(i>1){ q=p;p=p->next;i--;} if(q==NULL){ L=t;t->next=p;} else if(!p)q->next=t;else{ q->next=t;t->next=...
试写出一个计算链表中结点个数的算法。其中指针p指向该链表的第一个结 ...
struct XXXX { 数据...struct XXXX *next;};long lianbiao_len(struct XXXX *p)\/\/XXXX是结构体名 { struct XXXX *p1=p;short i=0;\/\/这里要赋初值,从0开始是因为p1==NULL的时候不算 while(p1!=NULL)\/\/要求尾节点指向NULL(0x000000){ p1=p1->next;i++;} return i;} ...
麻烦讲解一下C语言中的链表
链表的最基本组成和功能,以单链表为例 首先单链表最基本要有一个数据区和一个指向区如下 ___| 数据区 | 指向区 | ———每个这样的结构称之为一个节点。每个节点又指向区连接。这样通过链表的第一个几点地址就可以找到整个链表的节点从而获取节点中的数据了。上面说的是最基本的链表...
如何用c语言输出整个单链表中的数据?
单链表中头结点有两个作用:一是标识该链表的存在,而是可以通过头结点遍历整个链表。所以不能通过移动头结点指针遍历链表,因为一旦移动了,下次就无法定位该链表了!void dispList(LinkList *L){ LinkList *p=L->next;\/\/定义一个结点指针p指向头结点的下一个结点 while(p){ \/\/如果p不为空则...
C语言中如何计算链表中的字符串指针含有的字数
sizeof(nows->word)就是获取word指针的大小,一般32位系统就是四字节,所以是4。另外,fclose(fp)前的那个循环,是不是要把fwrite语句也包含在循环体里?否则只会把链表的最后一个结点写入文件。如果要把所有结点都写入文件,for循环要用大括号把下面两句话都包含进去。
百欧钠林: #include "stdio.h" #define NULL 0; //链表原理 struct student {char name[20];int age;struct student * next; }; void inputData(struct student * stu) {if(stu){printf("请输入姓名:");scanf("%s",stu->name);printf("请输入年龄:")...
关岭布依族苗族自治县18988172812: 急求一二级C编程:统计带头结点的单链表中节点的个数,并存放在N中 各位大大知道的说下 - ?
百欧钠林: void getlenght(LinkList &L,int &N) { N=1; Lnode *p=L->next; while(p) { N++; p=p->next; } }
关岭布依族苗族自治县18988172812: 如何用类c语言计算带头结点的单链表中的节点个数 - ?
百欧钠林: #include<stdio.h>#include<stdlib.h> typedef struct node { int data; struct node *next; }node; void count(node* l)//计算节点个数,输出所有值 { int n = 0; node* p = l->next; while(p) { printf("%d ",p->data); p = p->next; n++; } printf("\n%d\n",n); } int ...
关岭布依族苗族自治县18988172812: 试写一算法 统计单链表中元素个数 数据结构一塌糊涂 用C语言写算法 求解 - ?
百欧钠林: 见下列代码,size()函数返回元素个数.这里省略l了插入和删除#include"iostream.h" struct Node { int Data; Node*next; }; class list { Node*head; public:list(){head=NULL;} int size(); }; int list::size() { int i=0; Node*current=head; while(current!=NULL) { i++; current=current->next; return i; } }
关岭布依族苗族自治县18988172812: C语言:设计一个统计单链表中数据值为D的结点个数 - ?
百欧钠林: int count(LinkList head, Data D) { int count = 0; Node *node = head; while(node!= NULL) { if(node->data==D) count++; node = node->next; } return count; }
关岭布依族苗族自治县18988172812: (1)设计一算法,计算单链表中数据域为x的节点个数 C语言数据结构 int CountX(LNode *head,ElemType x); - ?
百欧钠林: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16你好! 请采纳 intCountX(LNode * head,ElemType x) {LNode *p=head;intcount=0;while(p){if(p->data==x)count++;p=p->next;}returncount; }
关岭布依族苗族自治县18988172812: 数据结构问题:在栈顶指针为top的链栈中,计算该链栈中结点的个数,用C语言实现. - ?
百欧钠林: 可以这么设栈的结构体 struct stack {int data;stack *down; }; 然后 stack *top = new stack; top->down = NULL; 给出push的编法 void push( int n,stack *top ) {stack *p = new stack;p->data = n;p->down = top;top = p; } 然后经过push,如果...
关岭布依族苗族自治县18988172812: 设计一个计算单链表(链表带头结点)中结点个数的算法,并依此输出链表中的元素的值 - ?
百欧钠林:[答案] #include#includetypedef struct node{int data;struct node *next;}node;void count(node* l)//计算节点个数,输出所有值{int n = 0;node* p = l->next;while(p){printf("%d ",p->data);p = p->next;n++;}printf("\...
关岭布依族苗族自治县18988172812: C编程:请设计一个算法,求出循环表中结点的个数 - ?
百欧钠林: 找个节点来标记,然后从它开始计算咯.c语言的数据结构没学很好哈,只能这么说,相信你会理解
关岭布依族苗族自治县18988172812: 建立一个链表,求其中奇数结点个数.?
百欧钠林: 就说一下思路吧 1、建立一个int的链表,初始化计数器 2、遍历链表 3、判断节点信息,如果节点是基数的话计数器加1 都是链表的基本操作,在书上都可以找到源码的,稍作修改就可以