常见到的一个编译错误,不知道什么原因
程序代码:
/*1、创建单链表 2、删除链表中的某个结点 3、输出单链表(遍历) 4、释放结点所占空间 5、查找第i个结点 6、插入一个结点 7、求链表的长度 菩萨保佑 */ /*线性表基本操作的编程实现*/ #include"stdio.h" #include"stdlib.h" #define LEN sizeof(struct Student) typedef struct Student { long num; char name[20]; int old; char sex[5]; struct Student *next; }Node; /*单向动态链表的创建*/ Node *creat() { Node *head,*p1,*p2; p1=p2=(Node *)malloc(LEN); head=NULL; printf("输入学生的学号(0表示结束):"); scanf("%d",&p1->num); while(p1->num!=0) { printf("\n输入学生的信息(姓名 年龄 性别):"); scanf("%s %d %s",p1->name,&p1->old,p1->sex); if(head==NULL)head=p1; else p2->next=p1; p2=p1; p1=(Node *)malloc (LEN); printf("\n输入学生的学号(0表示结束):"); scanf("%d",&p1->num); } p2->next=NULL; return head; } /*单向链表的输出*/ void print(Node *head) { Node *p; p=head; if(head!=NULL) { printf("\n学号 姓名 年龄 性别\n"); do { printf(" %s %s %d %s",p->name,p->old,p->sex); p=p->next; }while(p!=NULL); } printf("\n"); } /*向单向链表中插入一个结点(按学号由小到大)*/ Node *insertup(Node *head,Node *newp) { Node *p1,*p2; p1=head; if(head==NULL) { head=newp; newp->next=NULL; } else { while((p1->num<newp->num)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p1->num>=newp->num) { p2->next=newp; newp->next=p1; } else { p1->next=newp; newp->next=NULL; } } return head; } /*单向链表的删除某一个结点*/ Node *del(Node *head,int num) { Node *p,*pt; int a=1,find=1; pt=head; p=pt; while(a==1) { if(pt->num==num) { p=pt->next; head=pt=p; find=1; a=1; } else { pt=pt->next; a=0; } } while(pt!=NULL) { if(pt->num==num) { p->next=pt->next; find=1; } else p=pt; pt=pt->next; } if(!find) printf("没有找到 %d.",num); return head; } /*查找*/ void search(Node *head,int i) { int m; Node *p=head; for(m=1;(m<i)&&(p!=NULL);m++) { p=p->next; } if(m<i)printf("输入数据%d有误!\n",i); else { printf("第i个结点的信息:\n"); printf("学号:%ld\n姓名:%s\n年龄:%d\n性别:%s",p->num,p->name,p->old,p->sex); } } /*释放空间*/ void release(Node * head) { free(head); } /*求链表的长度*/ int length(Node *head) { Node *p=head; int length=0; while(p!=NULL) { length=length+sizeof(Node); p=p->next; } return length; } /*主函数*/ int main() { long num; Node *head,*newp=(Node *)malloc(LEN); int i,length1; /* printf("输入一个数字(1-7):"); scanf("%d",&k);*/ head=creat(); //1. print(head); printf("输入要删除的结点(学号):"); //2. scanf("%d",&num); head=del(head,num); print(head); //3. printf("要查找的结点数 :"); scanf("%d",&i); search(head,i); //5 printf("输入要插入的节点的信息(学号 姓名 年龄 性别 ):\n"); //6 scanf("%ld %s %d %s",&newp->num,newp->name,&newp->old,newp->sex); insertup(head,newp); print(head); length1=length(head); //7 printf("该链表的长度: %d\n",length1); release(head); //4 return 0; } ·