雙向鏈表的創建刪除

//雙向鏈表
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct node
{
 char name[20];
 struct node *prior,*next;
}stud;

//創建雙向鏈表
stud *creat(int n)
{
 stud *p,*h,*s;
 int i;
 h=(stud*)malloc(sizeof(stud));
 h->name[0]='\0';
 h->next=NULL;
 h->prior=NULL;
 p=h;
 for(i=0;i<n;i++)
 {
  s=(stud*)malloc(sizeof(stud));
  p->next=s;
  printf("input the %d students' name", i+1);
  scanf("%s",s->name);
  s->prior=p;
  s->next=NULL;
  p=s;
 }
 p->next=NULL;
 return(h);
}
//查找
stud*search(stud*h,char*x)
{
 stud*p;
 char*y;
 p=h->next;
 while(p)
 {
  y=p->name;
  if(strcmp(y,x)==0)
  {
   return(p);
  }else
  {
   p=p->next;
  }
  printf("cannot find data\n");
 }
 return NULL;
}

//刪除
void del(stud*p)
{
 p->next->prior=p->prior;
 p->prior->next=p->next;
 free(p);
}

void main()
{
int number;
char sname[20];
stud *head,*sp;
puts("Please input the size of the list");
scanf("%d",&number);
head=creat(number);
sp=head->next;
sp=head->next;
while(sp)
{
	printf("%s",sp->name);
    sp=sp->next;
}
printf("\nPlease input the name which you want to find:\n");
scanf("%s",sname);
sp=search(head,sname);
printf("the name you want find is :%s\n",sp->name);
del(sp);
sp=head->next;
printf("Now the double list is :\n");
while(sp)
{

 printf("%s",&*(sp->name));
 sp=sp->next;

}
printf("\n");
puts("\n Press any key to quit..");


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章