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

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值