c语言问题求详细注释

#include<stdio.h>
#include <malloc.h>
struct node{
char no[12];
char name[40];
float sales;
struct node*link;};
void serach(struct node *head){
float sum = 0.0;
struct node *q1,*q2;
struct node *p;
p = head->link;
q1 = head->link;
q2 = head->link;
while (p != NULL) {
if (p->sales >= q1->sales) {
q1 = p; }
if (p->sales <= q2->sales) {
q2 = p; }
sum += (p->sales);
p = p->link; }
printf("销售额最高:代号:%s,姓名:%s,销售额:%f\n",q1->no,q1->name,q1->sales); printf("销售额最低:代号:%s,姓名:%s,销售额:%f\n",q2->no,q2->name,q2->sales); printf("总额:%f\n",sum);}
void main(){
int i;
int n;
struct node *head;
struct node *tail;
head = (struct node *)malloc(sizeof(struct node));
head->link = NULL;
tail = head;
printf("要输入几个结点:");
scanf("%d",&n);
for (i = 0 ; i < n; ++i) {
struct node *pnew= (struct node *)malloc(sizeof(struct node));
pnew->link = NULL;
printf("输入代号:"); scanf("%s",pnew->no);
printf("输入name:"); scanf("%s",pnew->name);
printf("输入sales:"); scanf("%f",&pnew->sales);
tail->link = pnew;
tail = pnew; };
serach(head);
while (1);}

链表这么简单,为什么没有人理解呢。。。

#include<stdio.h>
#include <malloc.h>
struct node{                                     //定义结点结构
        char no[12];
        char name[40];
        float sales;                             //前三个没什么好解释的
        struct node*link;                            //指向“下一个结点”的指针
};
void serach(struct node *head){                     //操作函数,通过链表头指针“head”访问链表
        float sum = 0.0;
        struct node *q1,*q2;
        struct node *p;
        p = head->link;                             //p指向第一个元素
        q1 = head->link;                            //q1.。。
        q2 = head->link;                     //q2.。。
        /* 下面的while主要是用于链表的遍历,
            如果看不懂可以参考我写的for版本:
            for(p=head;p!=NULL;p=p->link)
            */
        while (p != NULL){                     //只要p不是“空”就处理
                                                    /*(也就是上一个处理的结点不是
                                                    “最后一个结点”,因为
                                                    “最后一个结点”的下一个结点
                                                    是“空”)*/
            if (p->sales >= q1->sales) {
                q1 = p;                             //q1指向销售额更大的
             }
            if (p->sales <= q2->sales) {
                q2 = p;                             //q2指向销售额更小的
            }
            sum += (p->sales);                     //sum加上当前的销售额
            p = p->link;                     //p跳向“下一个结点”
        }
                             //输出数据.
        printf("销售额最高:代号:%s,姓名:%s,销售额:%f\n",q1->no,q1->name,q1->sales);
        printf("销售额最低:代号:%s,姓名:%s,销售额:%f\n",q2->no,q2->name,q2->sales);
printf("总额:%f\n",sum);
}
void main(){
    int i;
    int n;
    struct node *head;
    struct node *tail;
    head = (struct node *)malloc(sizeof(struct node)); //为头结点分配空间,大小为sizeof(node)
    //如果你不是初学者可以忽略这段话:
    /*malloc函数作用是按字节来分配空间,返回一个void*类型的指针
      因为它只是在闲置内存划出了一块区域,所以它并不管内部的源数据
      所以当分配出空间时,malloc极有可能给你一个不全是0的数据空间*/
    head->link = NULL;                                 //头指针设为“空”
    tail = head;                                 //尾指针指向头
    printf("要输入几个结点:");
    scanf("%d",&n);
    for (i = 0 ; i < n; ++i) {
        struct node *pnew= (struct node *)malloc(sizeof(struct node));
                            //分配空间
        pnew->link = NULL;  //“下一位”设为“空”         
        printf("输入代号:"); scanf("%s",pnew->no); //输入数据。。。
        printf("输入name:"); scanf("%s",pnew->name);
        printf("输入sales:"); scanf("%f",&pnew->sales);
        tail->link = pnew; //上一位的下一位连接上
        tail = pnew;         //指向最后一个节点
    };
    serach(head);//执行函数
    while (1);//。。。我建议你用getchar()或stdlib.h里的system("pause")这样比较烧CPU
}

说实话我不喜欢这样,浪费了一个结点的空间。

追问

q, q1 ,q2=head–>link什么意思,都指向一个下面是怎么比较的?

追答

初始都指向第一个元素,p自己往下跳,不就实现比较了吗

追问

while(1)加或不加都一样吧

追答

用处是不允许程序自己退出,只允许用户关闭控制台

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-08
程序文件发来 我给你添追问

怎么发

追答

思信我把

相似回答