zoukankan      html  css  js  c++  java
  • 链表的基本操作

    #include <stdlib.h>
    #include 
    <stdio.h>

    typedef 
    struct node 
    {
        
    int data;
        
    struct node *next;
    }NODE;

    NODE 
    *head=NULL;

    /*函数声明*/
    NODE 
    *createlist_head(int len);
    NODE 
    *createlist_end(int len);
    NODE 
    *createlist_sort(int len);
    int insert(NODE *newNode,int index);
    void insert_sort(NODE *newNode);
    void display(NODE *p);

    /*创建新节点*/
    NODE 
    *createNewNode()
    {
        NODE 
    *p;
        
    int c;
        scanf(
    "%d",&c);
        p
    =(NODE *)malloc(sizeof(NODE));
        p
    ->data=c;
        p
    ->next=NULL;
        
    return p;
    }

    /*链表头部插入*/
    NODE 
    *createlist_head(int len)
    {
        NODE 
    *p;
        
    int i,c;
        
    for (i=0;i<len;i++)
        {
            p
    =createNewNode();
            p
    ->next=head;
            head
    =p;
        }
        
    return head;
    }

    /*链表尾部插入*/
    NODE 
    *createlist_end(int len)
    {
        NODE 
    *p,*tail=head;
        
    int c,i;
        
    for (i=0;i<len;i++)
        {
            p
    =createNewNode();
            
    if(head==NULL)
                head
    =p;
            
    else
                tail
    ->next=p;
            tail
    =p;
        }
        
    return head;
    }

    /*按data成员值大小排序插入*/
    NODE 
    *createlist_sort(int len)
    {
        NODE 
    *p;
        
    int c,i;
        
    for (i=0;i<len;i++)
        {
            p
    =createNewNode();
            insert_sort(p);
        }
        
    return head;
    }

    /*按指定位置进行插入*/
    int insert(NODE *newNode,int index)        
    {
        
    int i=0;
        NODE 
    *p;
        p
    =head;
        
    while (p!=NULL&&i<index-1)
        {
            p
    =p->next;
            i
    ++;
        }
        
    if(p==NULL)
            
    return 0;
        
    else
        {
            newNode
    ->next=p->next;
            p
    ->next=newNode;
            
    return 1;
        }
    }

    /*按data成员值的大小排序插入*/
    void insert_sort(NODE *newNode)            
    {
        NODE 
    *p1,*p2;                        //p1,p2记录指标指针位置,一前一后
        p1=p2=head;
        
    while (p1!=NULL)
        {
            
    if (p1->data<newNode->data)        //成员值比较
            {
                p2
    =p1;
                p1
    =p1->next;
            }
            
    else
                
    break;
        }
        
    /*以下代码处理新节点插入位置的各种情况*/

        
    if(head==NULL)                        //如果头结点为空,即链表空
            head=newNode;
        
    else if(p1==NULL)                    //如果到达链表尾部
            p2->next=newNode;
        
    else if(p1==head)                    //如果p1指向头结点
        {
            newNode
    ->next=p1;
            head
    =newNode;
        }
        
    else                                //如果p1指向中间节点
        {
            newNode
    ->next=p1;
            p2
    ->next=newNode;
        }
    }

    /*显示链表内容*/
    void display(NODE *p)
    {
        NODE 
    *q;
        q
    =p;
        
    while(q!=NULL)
        {
            printf(
    "%d\n",q->data);
            q
    =q->next;
        }
        
    //     while (p!=NULL)
    //     {
    //         q=p;
    //         p=p->next;
    //         free(q);
    //     }
    }

    NODE 
    *del(int index)
    {
        NODE 
    *p,*q;
        
    int i=0;
        p
    =head;
        
    while (p->next!=NULL&&i<index-1)
        {
            p
    =p->next;
            i
    ++;
        }
        
    if(p->next==NULL)
            
    return NULL;
        
    else
        {
            q
    =p->next;
            p
    ->next=q->next;
            
    return q;
        }
    }

    NODE 
    *search(char value)
    {
        NODE 
    *p;
        p
    =head;
        
    while(p!=NULL&&p->data!=value)
            p
    =p->next;
        
    return p;
    }

    void main()
    {
        
    int flag;
        NODE 
    *p;
    //     display(createlist_sort(5));
    //     display(createlist_head(5));
         display(createlist_end(5));
        p
    =createNewNode();
        flag
    =insert(p,3);
        
    if(flag)
            printf(
    "插入成功!\n");
        
    else
            printf(
    "插入失败!\n");
        display(head);
        free(del(
    3));
        display(head);
    }
  • 相关阅读:
    opencv计算机视觉学习笔记一
    opencv_python学习笔记十八
    opencv_python学习笔记十六
    Android-锁屏功能
    Android-加载透明PNG图片变黑的问题
    Android-AttributeSet详解
    Android-UGallery
    Android-相册效果(图片缩放 自由滑动)
    Android进阶篇-内存管理
    Android进阶篇-时间滑动控件
  • 原文地址:https://www.cnblogs.com/qixin622/p/1238181.html
Copyright © 2011-2022 走看看