c语言中 我需要一个循环链表的范例 要求简明易懂

2024-12-15 19:52:02
推荐回答(1个)
回答1:

#include
#include
#define N 10

//*********************************
//定义链表节的结构
//*********************************
typedef struct node
{  
char name[20]; //姓名
struct node * next; //next指针
}stud;

//*********************************
//创建循环链表。n为要创建
//的链表的节点个数不含头节点
//*********************************
stud* creat(int n)
{  
stud*p,*h,*s;  
int i;  
if((h=(stud*)malloc(sizeof(stud)))==NULL)//为头节点申请内存空间  
{   
printf("不能分配内存空间!");   
exit(0);//失败则退出程序
}
 
h->name[0]=' '; //头节点的neme域为空
h->next=NULL;  
p=h;

//为后面的n个节点申请内存空间,并填入姓名 
for(i=0;i {   
if((s=(stud*)malloc(sizeof(stud)))==NULL)   
{    
printf("不能分配内存空间!");    
exit(0);   
}   
p->next=s; //挂上下一个节点  
printf("请输入第%d个人的姓名",i+1);   
scanf("%s",s->name);    
s->next=NULL;   
p=s;  
}  
p->next=h;  
return(h);
}

//*********************************
//搜索节点
//*********************************
stud* search(stud*h, char*x)
{  
stud*p;  
char*y;  
p=h->next;  
while(p!=h)  
{   
y=p->name;   
if(strcmp(y,x)==0)    
return(p);   
else
p=p->next;
}  
printf("没有查找到该数据!");
}

//*********************************
//打印链表
//*********************************
void print(stud*h)
{  
int n;  
stud*p;  
p=h->next;  
printf("数据信息为:n");  
while(p!=h)  
{   
printf("%s",&*(p->name));   
p=p->next;  
}  
printf("n");
}

//*********************************
//主函数
//*********************************
main()
{  
int number;  
char studname[20];  
stud*head,*searchpoint;  
number=N;  
clrscr();  
head=creat(number);  
print(head);  
printf("请输入你要查找的人的姓名:");  
scanf("%s",studname);  
searchpoint=search(head,studname);  
printf("你所要查找的人的姓名是:%s",
*&searchpoint->name);
}