单链表基本操作

来源:互联网 发布:淘宝上怎么改差评 编辑:程序博客网 时间:2024/06/07 06:48
#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 =0;           }           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;}

原创粉丝点击