永发信息网

单链表的实现,求找错

答案:3  悬赏:60  手机版
解决时间 2021-04-04 19:41
单链表的实现,求找错
最佳答案
帮你优化了一下,你自己测试一下吧,希望对你有帮助
#include
#include
#include
#define IS_FULL(ptr) (!(ptr))
typedef struct stu
{
char name[20]; //名字应该是字符串(数组)存放
int score;
struct stu*next;
}Stu;
typedef Stu* List; //这里最好加个空格

char* Inputname()
{
static char a[20];
scanf("%s" , a ); //名字不会只是有一个字符吧
return a;
}
int* Inputscore()
{
static int a;
scanf("%d",&a);
return &a;
}
void Printstu(char *a,int b) //这里传来的是个字符串,是个指针变量
{
printf("%20s%5d\n",a,b);
}
Stu* Newstu()
{
Stu*p=(Stu*)malloc(sizeof(Stu));
if(IS_FULL(p)){
fprintf(stderr,"The memery is full\n");exit(1);
}
printf("输入名字\n");
strcpy( p->name , Inputname() ); //字符串赋值
printf("输入分数\n");
p->score=*(Inputscore());
p->next=NULL ;
return p;
}

List BuildList()
{
Stu*p,*r=NULL,*first=NULL;char c;
do{
p=Newstu();
if(first==NULL)
first=p; //第一个为表头
else
r->next=p ; //追加到表尾
r=p ; //新表尾

printf("Another element?y/n");
while((c=getchar())=='\n');
}while ( c != 'n' ) ;
return first;
}
void PrintList(List first)
{
printf("\nThe list contains:\n");
for(;first;first=first->next)
Printstu(first->name,first->score);
printf("\n");
}
//插到i前面
Stu * ListInsert(Stu *L,int i,int v,char *name)
{
int j=1;
Stu*p,*s,*Last=NULL;
p=L;
while(j{
j++;
Last=p;
p=p->next;
}
s=(Stu*)malloc(sizeof(Stu));
strcpy( s->name , name );
s->score=v;
s->next=p;
if ( p==L ) //在第一个前面插入,则要换头了,因此,你需要返回新的头指针
L=s ;
else
Last->next=s ;
return L ;
}

Stu * ListDelete(Stu*L,int i)
{
int j=1;
Stu *p=L; //既然有L来赋值,就不要自己申请空间了。
Stu *Last=NULL ;
while (j{
j++;
Last=p;
p=p->next;
}
if(p)
{
Stu * u=p;
if ( p==L ) //删除第一个,则要换头了,因此,你需要返回新的头指针
L=p->next ;
else
Last->next=p->next ;
free(u);
}
return L;
}
int main()
{
List lst;
int i,j,q;
char name[20];
lst=BuildList();
PrintList(lst);
printf("输入插入元素的位置\n");
scanf("%d",&i);
printf("输入插入元素的名字和分数\n");
scanf("%s%d",name,&j);
lst=ListInsert(lst,i,j,name);
PrintList(lst);
printf("删除元素的位置\n");
scanf("%d",&q);
lst=ListDelete(lst,q);
PrintList(lst);
return 0;}
全部回答
自己编译一下就可以啊,单链表很简单的
自己对,可以运行
输入样式 名字只能输入一个字符,建议改字符串
#include
#include
#include
#include
#define IS_FULL(ptr)(!(ptr))
typedef struct stu
{
char name;
int score;
struct stu*next;
}Stu;
typedef Stu*List;
char* Inputname()
{
static char a;
a=getchar();
return &a;
}
int* Inputscore()
{
static int a;
scanf("%d",&a);
return &a;
}
void Printstu(char a,int b)
{
printf("%c %d\n",a,b);
}
Stu* Newstu()
{
Stu*p=(Stu*)malloc(sizeof(Stu));
if(IS_FULL(p)){
fprintf(stderr,"The memery is full\n");exit(1);
}
printf("输入名字\n");
p->name=*Inputname();
printf("输入分数\n");
p->score=*Inputscore();
return p;
}
List BuildList()
{
Stu*p,*r=NULL,*first=NULL;char c;
printf("Another element?y/n");
while((c=getchar())!='\n')
while(tolower(c)!='n')
{
getchar();
p=Newstu();
if(first!=NULL)
{r->next=p;
r=p;
r->next=NULL;
}
else
{
first=p;
first->next=NULL;
r=first;
}

printf("Another element?y/n");
while((c=getchar())=='\n');
}
return first;
}
void PrintList(List first)
{
printf("\nThe list contains:\n");
for(;first;first=first->next)
Printstu(first->name,first->score);
printf("\n\n");
}
int ListInsert(Stu *L,int i,int v,char u)
{
int j=0;
Stu*p,*s;
p=L;
while(j{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else {
s=(Stu*)malloc(sizeof(Stu));
s->name=u;
s->score=v;
s->next=p->next;
p->next=s;
return 1;
}
}
int ListDelete(Stu*L,int i)
{int j=0;
Stu *p=(Stu*)malloc(sizeof(Stu));
p=L;
while (j{j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
Stu*u=(Stu*)malloc(sizeof(Stu));
u=p->next;
p->next=u->next;
free(u);
return 0;
}
}
void main()
{
List lst;
int i,j,q;
char k;
lst=BuildList();
PrintList(lst);
printf("输入插入元素的位置\n");
scanf("%d",&i);
printf("输入插入元素的名字和分数\n");
scanf("%s%d",&k,&j);
ListInsert(lst,i,j,k);
PrintList(lst);
printf("删除元素的位置\n");
scanf("%d",&q);
ListDelete(lst,q);
PrintList(lst);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
烟台到韩国的客船公司叫什么
韩国人是不是都整容,为什么极限挑战张艺兴的
已知在水溶液中,乙醇(C2H5OH)不发生电离,
特色言情小说他只不过是肚子疼去了趟医院回来
经常感冒,怎么做才能让自己的抵抗力增强?
目前世界上除了欧美法系和大陆法系以外,还存
请教有关不锈钢如何氮化
伤心到哭不出的时候,我该怎么释放心里的压抑
《夜宴》中男主角是谁扮演
李连杰的电影杀手之王里面最后和曾志伟打架那
想要直观表示地表的起伏状况,可用________图
冰激淋是哪国的外来语,冰激凌是从哪国传进来
手机订飞机票能在手机上退吗
为什么我虚荣安装数据的时候要闪退
江苏东台王氏三槐堂的来历
推荐资讯
长春市最出名的画画培训中心
06款2.4雅阁顶配20万公里能值多少钱?
避孕套哪种最薄啊?是尚牌至薄0.03还是冈本003
用乘法公式计算:9.92×10.12.
某微粒的结构示意图为:该元素的原子:核内有
毕恭毕敬的意思
(1)如图中的两架敌机,一架是实际飞机,一
北美洲最大的半岛是A.索马里半岛B.拉布拉多半
美国迦禾油烟机,燃气灶,热水器2017年有什么
佳能60D配腾龙17一50F2。8镜头会跑焦吗?
如何让头发变的很蓬松
<分裂>那首歌里的“基于两种立场我会罩着你”
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?