#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); } }通过学生姓名来实现,如需其他信息,可以添加
循环双向链表
猜你喜欢
转载自blog.csdn.net/m0_37687058/article/details/72675274
今日推荐
周排行