求单链表的结点个数
1.求单链表的结点个数
#include <stdio.h>
#include <stdlib.h>
typedef int dataType;
// 单链表
typedef struct linkNode
{
dataType data;
struct linkNode *next;
}node,*linkList;
// 1.初始化不带头结点的单链表
void init(linkList *list)
{
*list = NULL; // 表示链表指针指向空处
}
// 2.输出单链表元素
void display(linkList list)
{
node *p = list; // p为工作指针,初值为头指针
if(!p)
{
printf("链表为空!\n");
return;
}
while (p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
// 3.根据用户输入构造单链表
void scanInsert(linkList *head)
{
node *p,*q;
dataType x;
printf("请输入(以9999作为结束标识)...\n");
scanf("%d",&x);
while (x!=9999)
{
q = (node*) malloc(sizeof(node));
q->data = x;
q->next = NULL;
if(!*head) // 创建第一个结点时
{
*head = q;
p = *head;
}
else
{
p->next = q;
p = p->next;
}
scanf("%d",&x);
}
}
// 3.8.2 统计单链表结点个数
int count(linkList head)
{
node *p = head;
int i = 0;
while (p)
{
p = p->next;
i++;
}
return i;
}
int main()
{
linkList list; // 声明一个指向链表的指针,即头指针
init(&list); // 初始化链表
scanInsert(&list);
display(list); // 输出链表
printf("链表的结点个数是%d个", count(list));
return 0;
}
2.求带头结点的单链表的结点个数
#include <stdio.h>
#include <stdlib.h>
typedef int dataType;
// 带头结点的单链表
typedef struct linkNode
{
dataType data;
struct linkNode *next;
}node,*linkList;
// 1.初始化带头结点的单链表
void init(linkList *head)
{
node *p = (node*)malloc(sizeof(node));
p->next = NULL;
*head = p;
}
// 2.输出链表
void display(linkList head)
{
node *p = head->next;
if(!p)
{
printf("单链表为空!\n");
return;
}
while (p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
// 3.根据用户输入构造带头结点的单链表
void scanInsert(linkList *head)
{
node *p = *head,*q;
dataType x;
printf("请输入(以9999作为结束标识)...\n");
scanf("%d",&x);
while (x!=9999)
{
q = (node*) malloc(sizeof(node));
q->data = x;
q->next = NULL;
p->next = q;
p = q;
scanf("%d",&x);
}
}
// 3.8.3 统计带头结点单链表结点个数
int count(linkList head)
{
node *p = head->next;
int i = 0;
while (p)
{
p = p->next;
i++;
}
return i;
}
int main()
{
linkList list; // 声明头指针
init(&list); // 初始化单链表
scanInsert(&list);
display(list);
printf("链表的结点个数是%d个", count(list));
return 0;
}
评论 (0)