zoukankan      html  css  js  c++  java
  • 单链表

    /**
     * 单链表
     **/
    #include <stdlib.h>
    #include <iostream.h>
    
    #define OK 1
    #define ERROR 0
    
    //结点类型
    typedef struct node{
        int item;
        struct node *next;
    }NODE;
    
    //链表类型
    typedef struct{
        NODE *head;
    }LINK_LIST;
    
    //初始化单链表
    int init(LINK_LIST *L)
    {
        L->head=(NODE*)malloc(sizeof(NODE));
        //为头结点分配存储单元
        if (L->head)
        {
            L->head->next=NULL;
            return OK;
        }
        else
            return ERROR;
    }
    
    //销毁链表L 
    void destory(LINK_LIST *L)
    {
        NODE *p;
        while (L->head){             //依次删除链表中的所有结点
            p=L->head;  
            L->head=L->head->next;
            free(p);
        }
    }
    
    //清空单链表
    void clear(LINK_LIST *L)
    {
        NODE *p;
        while (L->head->next){
            p=L->head->next;            //p指向链表中头结点后面的第一个结点
            L->head->next=p->next;        //删除p结点
            free(p);                    //释放p结点占据的存储空间
       }
    }
    
    //链表长度
    int length(LINK_LIST L)
    {
        NODE *p = L.head;
        int len;
        for(p=L.head,len=0; p->next!=NULL; p=p->next,len++);
        return(len);
    }
    
    //判断是否为空
    int isEmpty(LINK_LIST L) 
    {
         if(L.head->next==NULL) 
             return 1;
         else 
             return 0;
    }
    
    //通过e返回链表L中第i个数据元素的内容
    void getElem(LINK_LIST L,int i,int *e)  
    {
        NODE *p;
        int j;
        if (i<1||i>length(L)) exit(0);
        //检测i值的合理性
        for (p=L.head,j=0; j!=i; p=p->next,j++);
        //找到第i个结点
        *e=p->item;          
        //将第i个结点的内容赋给e指针所指向的存储单元中
    }
    
    //在链表L中检索值为e的数据元素
    NODE *locateELem(LINK_LIST L,int e)
    {
        NODE *p;
        for(p=L.head->next;p&&p->item!=e;p=p->next); 
        //寻找满足条件的结点
        return(p);
    }
    
    //返回链表L中结点e的直接前驱结点
    NODE *PriorElem(LINK_LIST L,NODE *e)
    {
        NODE *p;
        if (L.head->next==e) return NULL;        
        //检测第一个结点
        for (p=L.head;p->next&&p->next!=e;p=p->next);     
        if (p->next==e) return p;
        else return NULL;
    }
    
    //返回链表L中结点e的直接后继结点
    NODE *NextElem(LINK_LIST L,NODE *e)
    {
        NODE *p;
        for(p=L.head->next;p&&p!=e;p=p->next);
        if (p) p=p->next;  
        return p;
    }
    
    //在链表L中第i个数据元素之前插入数据元素e   
    int insertList(LINK_LIST *L,int i,int e)       
    {
        NODE *p,*s;
        int j;
        if (i<1||i>length(*L)+1) return ERROR;
        s=(NODE*)malloc(sizeof(NODE));
        if (s==NULL) return ERROR;
        s->item=e;
        for (p=L->head,j=0;p&&j<i-1;p=p->next,j++); 
        //寻找第i-1个结点
        s->next=p->next;  p->next=s;      //将s结点插入
        return OK;
    }
    
    //将链表L中第i个数据元素删除,并将其内容保存在e中。
    int deleteList(LINK_LIST *L,int i,int *e)
    {
        NODE *p,*s;
        int j;
        if (i<1||i>length(*L)) return ERROR;    
        //检查i值的合理性
        for(p=L->head,j=0;j<i-1;p=p->next,j++);   
        //寻找第i-1个结点
        s=p->next;           //用s指向将要删除的结点
        *e=s->item;          
        p->next=s->next;      //删除s指针所指向的结点
        free(s);
        return OK;
    }
    
    //插入链表
    void insert(LINK_LIST *L)
    {
        cout<<"请依次递增输入这5个数据:"<<endl;
        NODE *head = L->head;
        for(int i=0;i<5;i++)
        {
            NODE* node = (NODE*)malloc(sizeof(NODE));
            cin>>node->item;
            node->next = NULL;
            head->next = node;
            head = node;
        }
    }
    
    //输出单链表
    void print(LINK_LIST L)
    {
        NODE* head = L.head->next;
        while(head != NULL)
        {
            cout<<head->item<<"  ";
            head = head->next;
        }
        cout<<endl;
    }
  • 相关阅读:
    js Excel导出
    计算机原理
    Sql Server 连接池
    转/ C# 托管资源和非托管资源
    求两个时间相差多少时间
    计算机基础
    MyEclipse CI 2018.9.0正式发布(附下载)
    DevExpress v18.1新版亮点——ASP.NET Bootstrap篇(二)
    DevExpress v18.1新版亮点——ASP.NET Bootstrap篇(一)
    DevExpress v18.1新版亮点——ASP.NET篇(四)
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2923622.html
Copyright © 2011-2022 走看看