wenxianmu_
2021-04-17 20:51
采纳率: 33.3%
浏览 39

关于C语言使用链表循环的一个小问题。

#include <stdio.h>
#include "stdlib.h"

#define lined_length 4//宏定义链表的最大长度是4

typedef struct Node{
    int data;
    int len;//这个用来检测链表的长度
    struct Node *next;
}node;//建立一个链表的节点

void lined_list(node *S,int data){
    if(S ->len == lined_length){
        S ->data = data + 1;//即使是满了也要加1
        S ->next = NULL;//当链表中的len等于链表最大值的时候我们就将链表的下一个节点赋值为空指针
    }
    else if(S ->len >lined_length){
        printf("满了!\n");
    }
    else{//不是的话我们就将下一个节点的之地赋值给现在的地址
        node *p = (node *)malloc(sizeof (node));//开辟新的链表空间
        S ->data = data;//将输入的值赋值给链表的data
        S ->next = p;//将下一个链表的地址赋值给这个链表的next
        S ->len  = S ->len + 1;//data每次都加1,这样可以加四次
        printf("node%d ->data = %d\n",S ->len,S ->data);
    }
}

int main() {
    int num,i;
    scanf("%d",&num);//输入建立多少个表
    node *p = (node *)malloc(sizeof (node));//开辟一个内存空间,将地址返回给p
    if(p==NULL){
        printf("开辟失败!\n");
    }
    else{
        printf("开辟成功!\n");
    }
    p ->data = 0;
    p ->len  = 0;
    p ->next = NULL;//对p进行初始化
    for(i = 0;i<num;i++){
        lined_list(p,num++);
    }
    return 0;
}

在这段代码main函数的for循环中,如果我执行代码时是lined_list(p,num++)那么结果无论如何都会输出循环四次的结果,但是我用lined_list(p,num)就只会执行num输入的次数,大于四次的也是输出四次,这是为什么呢?请大家赐教

4条回答 默认 最新

相关推荐 更多相似问题