|
30鱼币
本帖最后由 haiouda 于 2015-4-8 23:01 编辑
- #include<stdio.h>
- #include<malloc.h>
- #include<math.h>
- #define LEN sizeof(struct Nuu)
- struct Nuu //定义结构体
- {
- int digit;
- struct Nuu *next;
- };
- int main()
- {
- int i=0,k=0,n=0,a[20],c[20],*p,*q; //数组c用来存放每行第一个数字,数组a用来暂存 第一个数以后的数字,且是排好序的。
- void szpl(int *b,int *q,int k); //输入和排序
- void print(struct Nuu *head,int *q,int k); //输出函数
-
- struct Nuu *head,*p1,*p2; // 定义指向结构的指针
-
- p=a; // p指针,指向a
- q=c; // q指针,指向c
-
- head=NULL; // 结构头为空;
-
- scanf("%d",&a[n]); //a 接收第一个数字;
-
-
- for(;;)
- {
-
- if (a[0]==0) break; // 当第一个数,输入为0 时,退出程序
-
- else
- {
- c[k]=a[0]; // 数组C 用来存 每行第一个数字
-
-
- szpl(p,q,k); //输入和排序
-
-
-
-
- if(head==NULL)
- {
- p1=(struct Nuu *) calloc(c[k],LEN); // 下面几行是把数组a 内的元素,加入到链表中
- head=p1;
- for(i=0;i<c[k];i++)
- {
- p2=p1;
- p2->digit=a[i];
- p1=p1+1;
- p2->next=p1;
-
- }
- p2->next=NULL;
-
- }
- else // 下面几行是把数组a 内的元素,加入到链表中
- {
- p1=(struct Nuu *) calloc(c[k],LEN); //定义 c[k]个,LEN,返回头指针
- p2->next=p1;
- for(i=0;i<c[k];i++)
- {
-
- p2=p1;
- p2->digit=a[i];
- p1=p1+1; //这里我犯了个错误p1是结构的指针,不是普通指针,所以p1+LEN与p1+1不等价
- p2->next=p1;
-
- }
- p2->next=NULL;
- }
-
- }
-
-
- n=0; k++; // n=0; 为重新输入数组a 做准备;k++;准备车入数组c的下一上元素
-
- scanf("%d",&a[n]);
-
- }
- print(head,q,k); //输出链表
- printf("\n\n");
-
-
- return 0;
- }
- void szpl(int *b,int *q,int k) //输入并安要求排序
- {
- int i,m,temp;
-
- for(i=0;i<*(q+k);i++)
- {
- scanf("%d",&b[i]);
- }
-
-
-
- for(i=0;i<*(q+k);i++)
- {
- for(m=i+1;m<*(q+k);m++)
- {
- if( abs(*(b+i)) < abs(*(b+m)))
- {
- temp=*(b+i);
- *(b+i)=*(b+m);
- *(b+m)=temp;
-
- }
-
- }
- }
-
-
- }
- void print(struct Nuu *head,int *q,int k) //输出
- {
- int i,m;
- struct Nuu *p;
- p=head;
-
- for(i=0;i<k;i++)
- {
- for(m=0; m<*(q+i);m++)
- {
- printf("%d ",p->digit);
- p=p->next;
- }
- printf("\n");
-
- }
-
- }
复制代码 用calloc一次建立的相邻的二个结点指针差,为何不是一个定值?
我是菜鸟,写程序的格式,难免不入流,希望各位大神们凉解。本次补上比较详细的注解方便各位阅读,希望不吝赐教 :handshake
|
-
-
最佳答案
查看完整内容
首先,你的代码好难看,不易懂,看的我都没心情往下看了;不知道是不是要求用指针的,对于这道题,我觉得你有点滥用指针了。
其实错的地方只有一个(两处)54行和71行的 p1=p1+LEN;
该为p1=p1+1;
指针加上或减去一个数n,不是指针所指向的地址加上或减去n个字节,而是加上或减去n的该指针类型的对象。
这样说你应该明白了吧
|