循环双向链表

来源:互联网 发布:怎么在淘宝上买东西 编辑:程序博客网 时间:2024/06/01 18:55
#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); }}
通过学生姓名来实现,如需其他信息,可以添加
原创粉丝点击