主题:[讨论]我不知道哪里出了错误,大家帮忙看看吧,谢了
要求:
建立一个结点值为学生姓名和成绩的链表,最少要有5个结点。然后在任意位置进行插入结点、删除某人的结点操作。每次操作后要有输出。
下面是我编的但是好像不能运行!
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
int number;
char name;
struct Node *next;
}Node,*LinkList;
void CreateLink(LinkList L)
{
Node *r,*s;
int flag=1;
r=L;
char c;
int i;
while(flag)
{
printf("输入c,i\n");
c=getchar();
scanf("%d",&i);
if(c!='$')
{
s=(Node *)malloc(sizeof(Node));
s->name=c;
s->number=i;
r->next=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
void display(LinkList head)
{
Node *p;
p=head->next;
while(p)
{
printf("number:%d name:%c\n",p->number,p->name);
p=p->next;
}
printf("\n");
}
void Locate( LinkList head,char z)//*查找
{
Node *p;
p=head->next;
while(p!=NULL)
if(p->name!=z)
p=p->next;
else
break;
printf("%c",p->number);
}
void InsList(LinkList L,int i,int j,char b)//*插入
{
Node *pre,*s;
int k;
if(i<1) printf("不存在");
pre=L;k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!pre)
{
printf("插入位置不合理");
}
s=(Node *)malloc(sizeof(Node));
s->name=b;
s->number=j;
s->next=pre->next;
pre->next=s;
display(L);
}
void DelList(LinkList L,int i)//*删除
{
Node *pre,*r;
int k;
int j;
char c;
pre=L;k=0;
while(pre->next!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!(pre->next))
{
printf("删除结点的位置不合理");
}
r=pre->next;
pre->next=pre->next->next;
j=r->number;
c=r->name;
free(r);
display(L);
}
void main()
{
Node *head;
int a;
CreateLink(head);
display(head);
printf("要执行什么?1查找 2插入 3删除\n");
scanf("%d",&a);
switch(a)
{
case 1:
char b;
printf("要查找人的名字b=");
scanf("%c",&b);
Locate(head,b);
break;
case 2:
int i,j;
char c;
printf("要插入的位置i=\n,插入学生的名字c=\n分数j=\n");
scanf("%d",&i);
scanf("%d",&j);
scanf("%c",&c);
InsList(head,i,j,c);
break;
case 3:
int r;
printf("要删除的位置i\n");
DelList(head,i);
break;
}
}
建立一个结点值为学生姓名和成绩的链表,最少要有5个结点。然后在任意位置进行插入结点、删除某人的结点操作。每次操作后要有输出。
下面是我编的但是好像不能运行!
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
int number;
char name;
struct Node *next;
}Node,*LinkList;
void CreateLink(LinkList L)
{
Node *r,*s;
int flag=1;
r=L;
char c;
int i;
while(flag)
{
printf("输入c,i\n");
c=getchar();
scanf("%d",&i);
if(c!='$')
{
s=(Node *)malloc(sizeof(Node));
s->name=c;
s->number=i;
r->next=s;
}
else
{
flag=0;
r->next=NULL;
}
}
}
void display(LinkList head)
{
Node *p;
p=head->next;
while(p)
{
printf("number:%d name:%c\n",p->number,p->name);
p=p->next;
}
printf("\n");
}
void Locate( LinkList head,char z)//*查找
{
Node *p;
p=head->next;
while(p!=NULL)
if(p->name!=z)
p=p->next;
else
break;
printf("%c",p->number);
}
void InsList(LinkList L,int i,int j,char b)//*插入
{
Node *pre,*s;
int k;
if(i<1) printf("不存在");
pre=L;k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!pre)
{
printf("插入位置不合理");
}
s=(Node *)malloc(sizeof(Node));
s->name=b;
s->number=j;
s->next=pre->next;
pre->next=s;
display(L);
}
void DelList(LinkList L,int i)//*删除
{
Node *pre,*r;
int k;
int j;
char c;
pre=L;k=0;
while(pre->next!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!(pre->next))
{
printf("删除结点的位置不合理");
}
r=pre->next;
pre->next=pre->next->next;
j=r->number;
c=r->name;
free(r);
display(L);
}
void main()
{
Node *head;
int a;
CreateLink(head);
display(head);
printf("要执行什么?1查找 2插入 3删除\n");
scanf("%d",&a);
switch(a)
{
case 1:
char b;
printf("要查找人的名字b=");
scanf("%c",&b);
Locate(head,b);
break;
case 2:
int i,j;
char c;
printf("要插入的位置i=\n,插入学生的名字c=\n分数j=\n");
scanf("%d",&i);
scanf("%d",&j);
scanf("%c",&c);
InsList(head,i,j,c);
break;
case 3:
int r;
printf("要删除的位置i\n");
DelList(head,i);
break;
}
}