单链表的创建删除排序插入逆向打印各种操作

it2022-05-08  8

#include <iostream> #include <stdio.h> #include < string.h> #include <stack> #include <conio.h> using  namespace std; typedef  struct student {      int data;      struct student *next; }node; node *create() { node *head, *p, *s; int x, cycle =  1; head = (node*)malloc( sizeof(node)); p = head; while (cycle) {     printf( " \n input data: ");     scanf( " %d ", &x);      if(x !=  0)     {         s = (node*)malloc( sizeof(node));     s->data = x;     p->next = s;     p = s;     }      else cycle =  0; } head = head->next; p->next = NULL; printf( " \n  yyy  %d ",head->data); return(head); } int length(node *head)     {          int n =  0;         node *p;         p=head;          while(p !=  0)             {                 p = p->next;                 n++;             }          return(n);     } void print(node *head)     {         node *p;          int n;         n = length(head);         printf( " noe the %d number are:\n ",n);         p = head;          if(head !=NULL)              while (p != NULL)             {                 printf( " \n  uuu  %d ",p->data);                 p = p->next;             }     } void printBack(node *head)     {         node *p;         p = head;          if (p != NULL)             {              if(p->next != NULL)                 {                     printBack(p->next);                 }             printf( " %d\t ",p->data);             }     } void print2Back(node *head) {     stack<node*>nodes;     node *p = head;      while(p != NULL)     {         nodes.push(p);         p = p->next;     }      while(!nodes.empty())     {         p = nodes.top();         printf( " %d/t ",p->data);         nodes.pop();     } } node *del(node *head, int num)     {         node *p = head,*p0;          while(p->data!=num && p->next!=NULL)         {             p0=p;             p=p->next;         }          if(num==p->data)         {              if(p==head)                 {                     head=p->next;                     free(p);                 } else                  {                     p0->next=p->next;                 }         }          else         printf( " not found ");      return(head);     } node *insert(node *head,  int num) {     node *p0, *p1, *p2;     p1 = head;     p0 =  new node;     p0->data = num;      while(p0->data > p1->data && p1->next != NULL)         {             p2 = p1;             p1 = p1->next;         }      if(p0->data <= p1->data)         {              if(p1==head)             {                 p1 = p0->next;                 head=p0;             } else             {                 p2->next = p0;                 p0->next = p1;             }         }      else         {             p2->next = p0;             p0->next = NULL;         }      return(head); } node *sort(node *head, int num)     {         node *p1, *p2, *p3;          int temp, n = num;          if(head == NULL && head->next == NULL)              return head;         p1 = head;          for( int i = 0; i< n; ++i)             {                 p1 = head;                  for( int j= 0; j<n-i; ++j)                     {                          if(p1->data > p1->next->data)                         {                             temp = p1->data;                             p1->data = p1->next->data;                             p1->next->data = temp;                         }                         p1 = p1->next;                     }             }          return (head);     } int main() {     node *head,stud;      int n,del_num, insert_num;     head=create();     cout<< " \nInt :  ";     cin>>del_num;     head = del(head, del_num);     print(head);     cout<< " \n please input the insert data: ";     cin>> insert_num;     head=insert(head,insert_num);     print(head);     cout<< " sort of num ; "<<endl;      /* head = sort(head,length(head));    print(head); */      return  0; }

转载于:https://www.cnblogs.com/gyearth/p/4905305.html

相关资源:c语言链式栈或循环队列,实现插入,删除数据,能演示过程

最新回复(0)