常见到的一个编译错误,不知道什么原因
程序代码:/*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;
}
·

