C++ 链表操作(建立,删除,添加)
// linklist.cpp : 定义控制台应用程序的入口点。 
// 
#include "stdafx.h" 
#include "malloc.h" 
#include "stdlib.h" 
#define NULL 0 
#define LEN sizeof(struct student) 
struct student 
{ 
 long num; 
 float score; 
 struct student* next; 
}; 
int n; 
struct student* creat() 
{ 
    struct student *head; 
 struct student *p1,*p2; 
 n=0; 
 p1=p2=(struct student*)malloc(LEN); 
 scanf("%ld",&p1->num); 
 scanf("%f",&p1->score); 
 head=NULL; 
 while (p1->num!=0) 
 { 
  n++; 
  if (n==1) 
  { 
   head=p1; 
  } 
  else 
  { 
   p2->next=p1; 
  } 
  p2=p1; 
  p1=(struct student*)malloc(LEN); 
  scanf("%ld",&p1->num); 
  if (p1->num==0) 
   break; 
  scanf("%f",&p1->score); 
 } 
 p2->next=NULL; 
    return (head); 
}; 
void print(struct student *head) 
{ 
 struct student *p; 
 printf("\n New,These %d records are:\n",n); 
 p=head; 
 if (head!=NULL) 
 { 
  do 
  { 
   printf("%d    %5.1f\n",p->num,p->score); 
   p=p->next; 
  }while (p!=NULL); 
 } 
} 
struct student* insert(struct student *head,struct student *stud) 
{ 
 struct student *p0, *p1, *p2; 
 p1=head; 
    p0=stud; 
 if (head==NULL) 
 { 
  head=p0; 
  p0->next=NULL;//insert into head point 
 } 
 else 
 { 
  while ((p0->num>p1->num)&&(p1->next!=NULL)) 
  { 
   p2=p1;      //p2 is point to just p1 point to node; 
   p1=p1->next; 
  } 
  if (p0->num<=p1->num) 
  { 
            if (p1==head) 
   { 
    head=p0;//insert into before first node 
   } 
   else 
   { 
                p2->next=p0;//insert into after point p2 
   } 
   p0->next=p1; 
  } 
  else 
  { 
            p1->next=p0;  //insert into after last point 
   p0->next=NULL; 
  } 
 } 
 n++; 
    return(head); 
}; 
struct student* del(struct student *head,long num) 
{ 
 struct student *p1, *p2; 
 if (head==NULL) 
 { 
  printf("\n list Null!\n"); 
  return (head); 
 } 
 p1=head; 
 while (num!=p1->num&&p1->next!=NULL) 
 //find num if equal p1->num 
 { 
  p2=p1; 
  p1=p1->next; 
 } 
 if (num==p1->num) 
 { 
  if (p1==head) 
   head=p1->next;//delete head node because num=head.num 
  else 
   p2->next=p1->next;//delete node. node is not head point 
  printf("delete:%ld\n",num); 
  n--; 
 } 
 else 
 { 
  printf("%ld not been found!\n",num); 
 } 
 return (head); 
}; 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
 struct student *head,*end; 
 head=creat(); 
    print(head); 
    struct student insertnode; 
 insertnode.num=3; 
 insertnode.score=900; 
 head=insert(head,&insertnode); 
 print(head); 
 head=del(head,3); 
 print(head); 
 return 0; 
} 
 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号