c语言数据结构

求带头结点的单链表中的结点个数

#include <stdio.h>
#include <stdlib.h>
typedef struct links{
    int elem;
    struct links *next;
}link;
link* chuangzaolinks(){
    link *p=(link*)malloc(sizeof(link));
    link *temp=p;
    int x;
    for(int i=1;i<5;i++){
        link*a=(link*)malloc(sizeof(link));
        printf("please input your element:");
        scanf("%d",&x);
        a->elem=x;
        a->next=NULL;
        temp->next=a; 
        temp=temp->next;    
    }
        return p; 
 }
void displaylink(link *p){
    link *temp=p;
    while(temp->next){
        temp=temp->next;
        printf("%d\n",temp->elem);
        
    }
    
 }
int showlink(link*p){
    link *temp=p;
    int d=0;
    while(temp->next){
        temp=temp->next;
        d++;
    }
    return d;
}
    
int main(){
    link *p;
    p=chuangzaolinks();
    displaylink(p);
    printf("结点个数为%d",showlink(p));
    return 0;
}

求不带头结点的单链表的结点个数:

#include <stdio.h>
#include <stdlib.h>
typedef struct links{
    int elem;
    struct links *next;
}link;
link* chuangzaolinks(){
    link *p=NULL;
    link *temp;
    int x;
    temp=(link*)malloc(sizeof(link));
    temp->elem=1;
    temp->next=NULL;
    p=temp;
    for(int i=2;i<5;i++){
        link*a=(link*)malloc(sizeof(link));
        printf("please input your element:");
        scanf("%d",&x);
        a->elem=x;
        a->next=NULL;
        temp->next=a; 
        temp=temp->next;    
    }
        return p; 
 }
void displaylink(link *p){
    link *temp=p;
    while(temp){
        printf("%d\n",temp->elem);
        temp=temp->next;
    }
    
 }
int showlink(link*p){
    link *temp=p;
    int d=0;
    while(temp){
        temp=temp->next;
        d++;
    }
    return d;
}
    
int main(){
    link *p;
    p=chuangzaolinks();
    displaylink(p);
    printf("结点个数为%d",showlink(p));
    return 0;
}
就本例而言,带头结点与不带头结点的差距体现在一下几点:

1.创造

2.输出

创造:

带头结点: link *p=(link*)malloc(sizeof(link));//直接创造头结点
    link *temp=p;//创造指向头结点的指针

不带    link *p=NULL;//创造头指针而不是头结点
    link *  temp=(link*)malloc(sizeof(link));//创造首元结点,并给与空间
    temp->elem=1;//初始化
    temp->next=NULL;
    p=temp;

输出:

link *temp=p;
    while(temp->next){
        temp=temp->next;//(当初想了挺长时间)由于头结点的缘故,第一个temp指向的是没有东西的头结点,所以需要顺延一位
        printf("%d\n",temp->elem);}

不带

 link *temp=p;
    while(temp){
        printf("%d\n",temp->elem);//直接指向首元结点,所以不需要
        temp=temp->next;}

过程中遗忘的c语言基础知识:

1.C语言 函数 return 语句可以有多个,可以出现在函数体的任意位置,但是每次调用函数只能有一个 return 语句被执行,所以只有一个返回值(少数的编程语言支持多个返回值,例如Go语言)

本文只具有一定参考作用,不具有指导作用,如有错误,还请各位大佬斧正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值