创建链表分别用头插法和尾插法输出,我的怎么没有输出

img

代码


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*Linklist;

void create_FIFO(Linklist head,int b[],int n);//尾插
void create_LIFO(Linklist head,int b[],int n);//头插
void printLinklist(Linklist head);//输出

int main()
{
   Linklist head1,head2;
    int b[100],m,i;
    
    head1=(LNode *) malloc(sizeof(LNode));//动态分配存储空间
    head1->next=NULL;
    head2=(LNode *) malloc(sizeof(LNode));//动态分配存储空间
    head2->next=NULL;
    
    i=0;
    while(scanf("%d",&m)!=EOF)
    {
        b[i++]=m;
    }
    
    void create_FIFO(Linklist head1,int b,int i);
    printLinklist(head1);
    void create_LIFO(Linklist head2,int b,int i);
    printLinklist(head2); 
    
    return 0;
}
void create_FIFO(Linklist head,int b[],int n)
{
    LNode *p,*q;
    int i=0;
    p=head;
    while(i<n)
    {
        q=(LNode *)malloc(sizeof(LNode));
        q->data=b[i];
        p->next=q;
        p=q;
        i++;
    }
    p->next=NULL;
    
}
void create_LIFO(Linklist head,int b[],int n)
{
    LNode *p;
    int i=0;
   
    while(i<n)
    {
          p=(LNode *)malloc(sizeof(LNode));
        p->data=b[i];
        p->next=head->next;
        head->next=p;
        i++;
    }
    
}
void printLinklist(Linklist head)//输出链表元素
{
    LNode *p;
    p=head->next;
    
    while(p!=NULL)
    {
        printf("%d",p->data);
        p=p->next;
    }
    printf("\n");
    
}

FIFO是先进先出,队列的方式,链表头取,插入链表尾。LIFO是后进先出,栈的方式,top指向栈顶,入栈、出栈都通过top指针。
这两个void开头的语句,不是调用方法,是有问题的,所以打印不出来:

    void create_FIFO(Linklist head1,int b,int i);
    printLinklist(head1);
    void create_LIFO(Linklist head2,int b,int i);
    printLinklist(head2); 

正确的应该是:

    create_FIFO(&head1,b,i);
    printLinklist(head1);
    create_LIFO(&head2,b,i);
    printLinklist(head2); 
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7659776
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【排序算法】内部排序算法总结
  • 除此之外, 这篇博客: 找出一个数组中出现次数最多的那个元素。中的 输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 复制2

    2

     题解:对于像我一样的新手,方法比较简单粗暴;

    我的思路是先开两个数组,一个用于存题中数据,另一个·存每个数据出现的次数;

    代码如下:

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        int a[20],b[20]={0};//开数组,存取数据。
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(a[i]==a[j])//每次遇到在i之后且与a[i]相等的数据次数都会被存在相应的b[i]中。
                    b[i]++;
            }
        }
        int max=0;
        for(int i=0;i<n;i++)
        {
            if(b[i]>b[max])//找出最大的b[i]
            {
                max=i;
            }
        }
        cout<<a[max]<<endl;
        return 0;
    }

  • 您还可以看一下 张长志老师的大白话学懂机器学习与推荐系统实战课程中的 016_机器学习模型和算法_线性回归(下)小节, 巩固相关知识点