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

    实现单链表的基本操作(创建,查询,插入,删除,销毁,归并,排序)

    创建链表 La
    链表初始化成功
    请输入La中元素的个数:9
    请输入第 9 个元素:9
    请输入第 8 个元素:8
    请输入第 7 个元素:7
    请输入第 6 个元素:6
    请输入第 5 个元素:5
    请输入第 4 个元素:4
    请输入第 3 个元素:3
    请输入第 2 个元素:2
    请输入第 1 个元素:1
    1  2  3  4  5  6  7  8  9
    创建链表 Lb
    链表初始化成功
    请输入Lb中元素的个数:5
    请输入第 5 个元素:9
    请输入第 4 个元素:7
    请输入第 3 个元素:5
    请输入第 2 个元素:3
    请输入第 1 个元素:1
    1  3  5  7  9
    合并链表 La Lb
    链表初始化成功
    1  1  2  3  3  4  5  5  6  7  7  8  9  9
    请按任意键继续. . .
    //----------------------------单链表的存储表示-------------------------------
    
    #include<stdio.h>
    #include<stdlib.h>
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define OVERFLOW -1
    
    typedef int Status;
    typedef int ElemType;
    
    typedef struct LNode
    {
        ElemType data;  
        struct LNode *Next;
    }LNode, *LinkList;
    
    Status InitList_L(LinkList *L) ;
    Status CreateList_L(LinkList *L, int n);
    Status ListInsert_L(LinkList *L, int i, ElemType e);
    Status ListDelete_L(LinkList *L, int i, ElemType *e);
    Status DisplayList_L(LinkList *L);
    Status GetElem_L(LinkList L, int pos, ElemType *e);
    Status LocateElem_L(LinkList L,int *pos, ElemType e);
    Status MergeList_L(LinkList *La, LinkList *Lb, LinkList *Lc);
    
    int main()
    {
        LinkList La,  Lb,  Lc;
        int countA,countB;
    
        printf_s("创建链表 La 
    ");
        InitList_L(&La);
        printf_s("请输入La中元素的个数:");
        scanf_s("%d", &countA);
        CreateList_L(&La, countA);
        DisplayList_L(&La);
    
        printf_s("创建链表 Lb 
    ");
        InitList_L(&Lb);
        printf_s("请输入Lb中元素的个数:");
        scanf_s("%d", &countA);
        CreateList_L(&Lb, countA);
        DisplayList_L(&Lb);
    
        printf_s("合并链表 La Lb 
    ");
        InitList_L(&Lc);
        MergeList_L(&La, &Lb, &Lc);
        DisplayList_L(&Lc);
    
        system("pause");
    }
    
    Status InitList_L(LinkList *L)
    {   
        *L = (LinkList)malloc(sizeof(LNode));      
        if(!(*L))    
        {        
            exit(0);   
        }   
        (*L)->Next = NULL;
        printf_s("链表初始化成功
    ");
        return OK;
    }// InitList_L
    
    Status CreateList_L(LinkList *L, int n)
    {
        int i;
        LinkList p;
    
        for (i = n; i > 0; --i)
        {
            p = (LinkList) malloc(sizeof(LNode));
            printf_s("请输入第 %d 个元素:", i);
            scanf_s("%d", &(p->data));
            p->Next = (*L)->Next;
            (*L)->Next = p;
        }
        return OK;
    }// CreateList_L
    
    Status ListInsert_L(LinkList *L, int i, ElemType e)
    {
        LinkList s, p;
        int j;
    
        p = *L;
        j = 0;
    
        //寻找第 i-1 个节点
        while (p && j < i - 1)
        {
            p = p->Next;
            ++j;
        }
    
        if (!p || j > i - 1)
        {
            return ERROR;
        }
    
        s = (LinkList) malloc(sizeof(LNode));
        s->data = e;
        s->Next = p->Next;
        p->Next = s;
        return OK;
    }// ListInsert_L
    
    Status ListDelete_L(LinkList *L, int i, ElemType *e)
    {
        LinkList p, q;
        int j;
    
        p = *L;
        j = 0;
    
        while ( p->Next && j < i - 1)
        {
            p = p->Next;
            ++j;
        }
        if (!(p->Next) || j > i - 1)
        {
            return ERROR;
        }
        q = p->Next;
        p->Next = q->Next;
        e = &(q->data);
        free(q);
        return OK;
    }// ListDelete_L
    
    
    Status DisplayList_L(LinkList *L)
    {
        LinkList p = (*L)->Next;
    
        while (p != NULL)
        {
            printf_s("%d  ", p->data);
            p = p->Next;
        }
        printf_s("
    ");
        return OK;
    }// DisplayList_L
    
    Status GetElem_L(LinkList L, int pos, ElemType *e)
    {
        LinkList p;
        int j;
        p = L->Next;
        j = 1;
    
        while (p && j < pos)
        {
            p = p->Next;
            ++j;
        }
        if (!p || j < pos)
        {
            return ERROR;
        }
        e = &(p->data);
        return OK;
    }// GetElem_L
    
    Status LocateElem_L(LinkList L,int *pos, ElemType e)
    {  
        LinkList p;  
        int i = 1; 
        p = L->Next;  
        while(p && (p->data != e)) 
        {   
            p = p->Next;  
            ++i; 
        }  
        if(!p) 
        {  
            return ERROR;
        } 
        *pos = i;
        return OK;
    }// LocateElem_L
    
    Status DestroyList_L(LinkList L)      //销毁链表
    { 
        LinkList p ;   
        while(L) 
        {  
            p = L; 
            L = L->Next;  
            free(p);  
        }  
        L = NULL;
        return OK;
    }// DestroyList_L
    
    Status MergeList_L(LinkList *La, LinkList *Lb, LinkList *Lc)
    {
        LinkList pa, pb, pc;
    
        pa = (*La)->Next;
        pb = (*Lb)->Next;
        *Lc = pc = *La;
    
        while (pa && pb)
        {
            //printf_s("pa->data:%d  pb->data:%d
    ",pa->data,pb->data);
    
            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;
        free(*Lb);
        return OK;
    }// MergeList_L
  • 相关阅读:
    linux基础——文件的压缩解压缩以及vim编辑
    linux基础——关于chmod用户权限和文件的相关操作
    linux基础的基础命令操作
    操作系统和网络基础之网络协议
    计算机基础
    【python小记】访问mysql数据库
    Qt去掉treeview项的焦点虚线
    嵌入式qt显示中文和隐藏鼠标
    【vim小记】自动保存配置
    重回ubutntu12.04小记(装完ubuntu做的几件事)
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3469822.html
Copyright © 2011-2022 走看看