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

    xiaoxiao2021-03-25  11

    #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;   }  
    转载请注明原文地址: https://ju.6miu.com/read-149780.html

    最新回复(0)