您的位置:首页 > 编程语言 > C语言/C++

c++ 单链表基本操作---程序员面试宝典

2017-03-24 10:10 477 查看
#include <cstdlib>  

#include <iostream>  

#include <string.h>  

#include <conio.h>  

#include <stdio.h>  

/*c++实现简单的单链表操作*/  

using namespace std;  

typedef struct student  

{  

        int data;  

        struct student *next;  

}node;  

//建立单链表   

node *creat()  

{  

     node *head,*p,*s;  

     int x,cycle=1;  

     head=(node *)malloc(sizeof(node));  

     p=head;  

     while(cycle)  

     {  

                 printf("\nplease input the data:");  

                 scanf("%d",&x);  

                 if(x!=0)  

                 {  

                         s=(node *)malloc(sizeof(node));  

                         s->data=x;  

                         printf("\n%d",s->data);  

                         p->next=s;  

                         p=s;  

                 }  

                 else  

                 cycle=0;  

     }  

     head=head->next;  

     p->next=NULL;  

     printf("\n   yyy    %d",head->data);  

     return head;  

}  

//单链表插入  

node *insert(node *head,int num)  

{  

     node *p0,*p1,*p2;  

     p1=head;  

     p0=(node *)malloc(sizeof(node));  

     p0->data=num;  

     while(p0->data>p1->data&&p1->next!=NULL)  

     {  

          p2=p1;p1=p1->next;  

     }  

          if(p0->data<=p1->data)  

     {  

           if(head==p1)  

           {  

                       p0->next=p1;  

                       head =p0;  

           }  

           else  

           {  

                       p2->next=p0;  

                       p0->next=p1;  

           }  

     }  

     else  

     {  

         p1->next=p0;  

         p0->next=NULL;  

     }  

     return head;  

}   

  

//单链表测长  

int length(node *head)  

{  

    int n=0;  

    node *p;  

    p=head;  

    while(p!=NULL)  

    {  

                  p=p->next;  

                  n++;  

    }  

    return n;  

}   

  

//单链表删除某个元素   

node *delNode(node *head,int num)  

{  

     node *p1,*p2;  

     p1=head;  

     while(num!=p1->data&&p1->next!=NULL)  

     {  

           p2=p1;  

           p1=p1->next;  

     }  

     if(num==p1->data)  

     {  

                      if(p1==head)  

                      {  

                                  head=p1->next;  

                                  free(p1);  

                      }  

                      else  

                      p2->next=p1->next;  

     }  

     else  

         printf("\n%d could not been found!",num);  

         return head;  

       

}  

  

//单链表逆   

node *reverse(node *head)  

{  

     node *p1,*p2,*p3;  

     if(head==NULL||head->next==NULL)  

     return head;  

     p1=head,p2=head->next;  

     while(p2)  

     {  

              p3=p2->next;  

              p2->next=p1;  

              p1=p2;  

              p2=p3;  

     }   

     head->next=NULL;  

     head=p1;  

     return head;  

}  

//打印单链表  

void print(node *head)  

{  

     node *p;  

     int n;  

     n=length(head);  

     printf("\nNow,These %d record are:\n",n);  

     p=head;  

     if(head!=NULL)  

     while(p!=NULL)  

     {  

                   printf("\n   uuu %d   ",p->data);  

                   p=p->next;  

     }  

}   

int main(int argc, char *argv[])  

{  

    node *list=creat();  

      print(list);  

     list = delNode(list,2);  

     print(list);  

     int x;  

     cin>>x;  

     list=insert(list,x);  

     print(list);  

     list=reverse(list);  

     print(list);  

     system("PAUSE");  

       

    return EXIT_SUCCESS;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: