您的位置:首页 > 其它

循环双向链表

2017-05-24 12:44 176 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
char name[20];
struct node* llink;
struct node* rlink;
}stu;
int num(stu*  Head)//计数
{
stu* temp=Head;
int i=0;
while(temp->rlink!=Head)
{
temp=temp->rlink;
i++;
}
return i;
}
stu* create(int n)
{
stu* Head,*pNew,*pEnd;
Head=(stu*)malloc(sizeof(stu));
Head->llink=NULL;
Head->rlink=NULL;
pNew=pEnd=Head;
while(n--)
{
pNew=(stu*)malloc(sizeof(stu));
printf("请输入姓名:");
scanf("%s",pNew->name);
pNew->llink=pEnd;
pNew->rlink=NULL;
pEnd->rlink=pNew;
pEnd=pNew;
}
pEnd->rlink=Head;
Head->llink=pEnd;
}
stu* insert(stu* Head,int n)
{
stu* pNew,*temp;
int sum,i;
pNew=(stu*)malloc(sizeof(stu));
printf("请输入插入姓名:");
scanf("%s",pNew->name);
sum=num(Head);
if(n>sum+1)
{
printf("插入出错\n");
return NULL;
}
temp=Head->rlink;
//printf("\n----\n");
for(i=1;i<n;i++)
{
temp=temp->rlink;
}
pNew->llink=temp->llink;
pNew->rlink=temp;
temp->llink->rlink=pNew;
temp->llink=pNew;
printf("插入成功\n");
return Head;
}
int   del(stu* Head,int n)
{
stu* temp=Head;
for(int i=1;i<n;i++)
{
temp=temp->rlink;
if(temp==Head)
{
return 0;
}
}
temp->rlink=temp->rlink->rlink;
temp->rlink->llink=temp;
return 1;
}
stu* rep(stu* Head,int n)
{
stu* temp=Head;
for(int i=1;i<=n;i++)
{
temp=temp->rlink;
}
printf("请输入存入信息:");
scanf("%s",temp->name);
printf("\n修改成功\n");
return Head;
}
int  find(stu* Head,char *a)
{
int i=1;
stu* temp=Head->rlink;
while(temp!=Head)
{
if(strcmp(temp->name,a)==0)
{
printf("\n找到了\n");
return i;
}
temp=temp->rlink;
i++;
}
printf("无此人\n");
return 0;
}
void   dis(stu* Head)
{
stu* temp;
temp=Head->rlink;
while(temp!=Head)
{
printf("%s  ",temp->name);
temp=temp->rlink;
}
}
int main()
{
printf("创建中......\n");
char b[20];
int choice,number,temp;
stu* Head;

printf("请输入学生数量:");
scanf("%d",&number);
Head=create(number);
printf("--------------------------------------------\n");
printf("1.插入信息     2.删除信息\n");
printf("3.修改信息      4.查找信息\n");
printf("5.显示信息       6.退出\n");
printf("请输入选择功能:");
scanf("%d",&choice);
while(1)
{
switch(choice)
{
case 1:
printf("请输入插入位置:");
scanf("%d",&temp);
insert(Head,temp);
break;
case 2:
printf("请输入删除位置:");
scanf("%d",&temp);
if(del(Head,temp)==0)
{
printf("\n删除出错\n");
}else{
printf("\n删除成功\n");
}
break;
case 3:
printf("请输入修改位置:");
scanf("%d",&temp);
rep(Head,temp);
break;
case 4:
printf("请输入查找信息:");
scanf("%s",b);
temp=find(Head,b);
if(temp)  printf("此人在%d个\n",temp);
break;
case 5:
dis(Head);
break;
case 6:
return 0;
break;
default:
printf("输入出错\n");

}
printf("\n请输入功能:");
scanf("%d",&choice);
}
}
通过学生姓名来实现,如需其他信息,可以添加
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: