求单链表的结点个数

lixiangrong
2024-01-29 / 0 评论 / 39 阅读 / 正在检测是否收录...

求单链表的结点个数

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

评论 (0)

取消