本帖最后由 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
|