单链表的实现,求找错
答案:3 悬赏:60 手机版
解决时间 2021-04-04 19:41
- 提问者网友:心如荒岛囚我终老
- 2021-04-04 02:06
单链表的实现,求找错
最佳答案
- 五星知识达人网友:轮獄道
- 2021-04-04 02:15
帮你优化了一下,你自己测试一下吧,希望对你有帮助
#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
#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;}
全部回答
- 1楼网友:忘川信使
- 2021-04-04 04:44
自己编译一下就可以啊,单链表很简单的
- 2楼网友:duile
- 2021-04-04 03:05
自己对,可以运行
输入样式 名字只能输入一个字符,建议改字符串
#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);
}
输入样式 名字只能输入一个字符,建议改字符串
#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
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);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯