C语言双链表问题,这里为什么插入失败?

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define N 5
typedef struct node
{
char name[20];
struct node *llink,*rlink;
}stud;
stud *create(int n)
{
stud *p,*h,*s;
int i;
h=(stud*)malloc(sizeof(stud));
/* {
printf("error!");
exit(0);
}*/
h->name[0]='\0';
h->llink=NULL;
h->rlink=NULL;
p=h;
for(i=0;i<n;i++)
{
s=(stud*)malloc(sizeof(stud));
/* {
printf("error!");
exit(0);
}*/
p->rlink=s;
printf("input %d student name:",i+1);
scanf("%s",s->name);
s->llink=p;
s->rlink=NULL;
p=s;
}
h->llink=s;
p->rlink=h;
return(h);
}
void show(stud *h)
{
int n;
stud *p;
p=h->rlink;
printf("\nData is:\n");
while(p!=h)
{
printf("%4s\n",p->name);
p=p->rlink;
}
}
stud *research(stud *h,char *na)
{
stud *p;
char *s;
p=h->rlink;
while(p!=h)
{
s=p->name;
if(strcmp(s,na)==0)
return p;
else
p=p->rlink;
}
printf("\nNo Data!\n");
exit(0);
}
stud *insert(stud *h,char *na,char *cn)
{
stud *p,*q;
char *s;
p=h->rlink;
q=(stud*)malloc(sizeof(stud*));
cn=q->name;
while(p!=h)
{
s=p->name;
if(strcmp(s,na)==0)
{
q->llink=p;
q->rlink=p->rlink;
p->rlink->llink=q;
p->rlink=q;
return q;
}
else
p=p->rlink;
}
printf("\n插入失败!\n");
exit(0);
}
main()
{
int n;
char sname[20],cname[20];
stud *head,*goal,*ins;
n=N;
head=create(n);
show(head);
printf("\n输入你想查找的名字:");
scanf("%s",sname);
goal=research(head,sname);
printf("\n找到名字:%s\n",goal->name);
printf("输入你想插入的名字:");
scanf("%s",cname);
ins=insert(head,sname,cname);
show(head);
}

第1个回答  推荐于2016-06-03
程序好着呢,是你把插入函数的一句话写错了,
stud *p,*q;
char *s;
p=h->rlink;
q=(stud*)malloc(sizeof(stud*));
cn=q->name;//strcpy(q->name,cn);
完整代码如下:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define N 5
typedef struct node
{
char name[20];
struct node *llink,*rlink;
}stud;
stud *create(int n)
{
stud *p,*h,*s;
int i;
h=(stud*)malloc(sizeof(stud));
/* { printf("error!"); exit(0); }*/
h->name[0]='\0';
h->llink=NULL;
h->rlink=NULL;
p=h;
for(i=0;i<n;i++)
{
s=(stud*)malloc(sizeof(stud));
/* { printf("error!"); exit(0); }*/
p->rlink=s;
printf("input %d student name:",i+1);
scanf("%s",s->name);
s->llink=p;
s->rlink=NULL;
p=s;
}
h->llink=s;
p->rlink=h;
return(h);
}
void show(stud *h)
{
stud *p;
p=h->rlink;
printf("\nData is:\n");
while(p!=h)
{
printf("%4s\n",p->name);
p=p->rlink;
}
}
stud *research(stud *h,char *na)
{
stud *p;
char *s;
p=h->rlink;
while(p!=h)
{
s=p->name;
if(strcmp(s,na)==0)
return p;
else
p=p->rlink;
}
printf("\nNo Data!\n");
exit(0);
}
stud *insert(stud *h,char *na,char *cn)
{
stud *p,*q;
char *s;
p=h->rlink;
q=(stud*)malloc(sizeof(stud*));
strcpy(q->name,cn);
while(p!=h)
{
s=p->name;
if(strcmp(s,na)==0)
{
q->llink=p;
q->rlink=p->rlink;
p->rlink->llink=q;
p->rlink=q;
return q;
}
else
p=p->rlink;
}
printf("\n插入失败!\n");
exit(0);
}
void main()
{
int n;
char sname[20],cname[20];
stud *head,*goal,*ins;
n=N;
head=create(n);
show(head);
printf("\n输入你想查找的名字:");
scanf("%s",sname);
goal=research(head,sname);
printf("\n找到名字:%s\n",goal->name);
printf("输入你想插入的名字:");
scanf("%s",cname);
ins=insert(head,sname,cname);
show(head);
}追问

但插入显示的还是乱码

追答

赋值是一方面,你把变量和已知量的位置弄反了,好好看看

追问

哪里?

本回答被提问者和网友采纳
第2个回答  2012-07-20
debug.
相似回答