• 线性表的单链表有关的相关操作【转】


    /*线性表的单链表存储,并且实现顺序建立链表、逆序建立链表、*****/
    /*元素的读取、插入、删除、逆置、合并、输出*****转载来自:http://blog.csdn.net/eugene_l/article/details/12946541***************/
    
    
    //-----------------头文件----------------------
    #include<stdio.h>
    #include<stdlib.h>
    
    //-----------------宏定义----------------------
    #define TURE 1
    #define FALSE 0
    #define ERROR 0
    #define OK 1
    #define OVERFLOW -2
    
    //-----------------线性表的单链表存储结构------
    typedef int elemType;
    typedef int Bool;
    typedef struct lNode
    {
        elemType data;
        struct lNode *next;
    }lNode,*linkList;
    
    //----------------子函数-----------------------
    void createList_L01(linkList L,int n);//逆位序输入n个元素的值,建立带头结点的单链表线性表L
    void createList_L02(linkList L,int n);//顺位序输入n个元素的值,建立带头结点的单链表线性表L
    Bool getElem_L(linkList L,int i,elemType &e);//L为带头结点的单链表。读取L中第i个元素,用e返回。
    Bool listInsert_L(linkList L, int i, elemType e);//在带头结点的单链线性表L中第i个位置之前插入元素e
    Bool listDelete_L(linkList L, int i, elemType &e);//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
    void mergeList_L(linkList La,linkList Lb,linkList Lc);//已知单链线性表La和Lb的元素按值非递减排列。
                                 //对并La和Lb的到新的单链线性表Lc,Lc的元素也按值的非递减排列。
    Bool backList_L(linkList L);//逆置带头结点的单链线性表L。
    void outputList(lNode L);//输出单链线性表L中的元素。
    
    //----------------主函数-----------------------
    int main()
    {
        return 0;
    }
    
    //----------------子函数的实现------------------
    void createList_L01(linkList L,int n)
    {
        linkList  p;
        L->next = NULL;
        for(int i = n;i > 0; --i)
        {
            p = (linkList)malloc(sizeof(lNode));
            scanf("%d",&p->data);
            p->next = L->next;
            L->next = p;
        }
    }
    
    void createList_L02(linkList L,int n)
    {
        linkList p,q;
        q = L;
        q->next = NULL;
        for(int i = n; i > 0; --i)
        {
            p = (linkList)malloc(sizeof(lNode));
            scanf("%d",&p->data);
            p->next = q->next;
            q->next = p;
            q = p;
        }
    }
    
    Bool getElem_L(linkList L,int i,elemType &e)
    {
        linkList p = L;
        int j = 1;
        while(p&&j < i)
        {
            p = p->next;
            j++;
        }
        if(!p ||j > i)return ERROR;
        e = p->data;
        return OK;
    }
    
    Bool listInsert_L(linkList L, int i, elemType e)
    {
        linkList p = L,s;
        int j = 1;
        while(p && j <= i - 1)
        {
            p = p->next;
            j++;
        }
        if(!p || j > i) return ERROR;
        s = (linkList)malloc(sizeof(lNode)); 
        s->data = e;
        s->next = p->next;
        p->next = s;
        return OK;
    }
    
    Bool listDelete_L(linkList L, int i, elemType &e)
    {
        linkList p = L;
        int j = 1;
        while(p->next && j < i)
        {
            p = p->next;
            ++j;
        }
        if(!(p->next) || j > i) return ERROR;
        linkList q = p -> next;
        p->next = q->next;
        e = q->data;
        free(q);
        return OK;
    }
    
    void mergeList_L(linkList La,linkList Lb,linkList Lc)
    {
        Lc ->next = La ->next;
        linkList pa = La -> next;
        linkList pb = Lb -> next;
        linkList pc;
        pc = La;
        while(pa&&pb)
        {
            if(pa->data <= pb->data)
            {
                pc->next = pa;
                pc = pa;
                pa = pa->next;
            }
            else
            {
                pc->next = pb;
                pc = pb;
                pb = pb ->next;
            }
        }
        pc ->next = pa ? pa : pb;
    }
    
    Bool backList_L(linkList L)
    {
        linkList p ,q;
        p = q = L -> next;
        L ->next = NULL;
        while(q)
        {
            p = q ->next;
            q ->next = L->next;
            L->next = q;
            q = p;
        }
        return OK;
    }
    
    void outputList(lNode L)
    {
        linkList p = L.next;
        while(p)
        {
            printf("%d ",p->data);
            p = p->next;
        }
    }
  • 相关阅读:
    Java异常
    Vector ArrayList LinkedList
    线程池
    Linux alias 或者 unalias 设置别名
    vim 知识点小结
    vim下出现^M怎么解决
    解决pip安装时出现报错TypeError unsupported operand type(s) for -= 'Retry' and 'int'
    MySQL备份与恢复
    mysql 去重的两种方式
    查看python的安装版本,位数及安装路径
  • 原文地址:https://www.cnblogs.com/hanyue-AC/p/3595448.html
Copyright © 2020-2023  润新知