• 单链表实现删除最小节点的算法


    #include <iostream.h>
    #include <stdlib.h>
    #define LIST_INIT_SIZE 100
    #define OK 1
    #define OVERFLOW -2
    #define ERROR 0
    typedef int Status;

    typedef int ElemType;
    typedef struct LNode{
    ElemType data;
    struct LNode *next;
    } LNode,*LinkList;

    Status InitList_L(LinkList &L)
    {
    L=new LNode;
    if(!L) exit(OVERFLOW);
    L->next=NULL;
    return OK;

    }
    void ListCreat_L(LinkList &L,int n)
    {
    ElemType x;
    LNode *p,*q;
    q=L;
    cout<<"input x(n)="<<endl;
    for(int i=n;i>0;i--)
    {
    p=new LNode;
    if(!p) exit(OVERFLOW);
    cin>>x;
    p->data=x;
    p->next=NULL;
    q->next=p;
    q=q->next;
    }
    }
    Status ListDelete_L(LinkList &L,int i,ElemType &e)
    {
    LNode *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;
    delete q;
    return OK;
    }
    void FindMin(LinkList &L)
    {
    ElemType result;
    int i=1;
    int minnum=1;//这里设置了一个记录最小位置的变量,这是关键
    LNode *p;
    p=L->next->next;
    ElemType min;
    if(!p) exit(ERROR);
    min=L->next->data;
    while (p)
    {
    i++;
    if(p->data<=min)
    {
    min=p->data;
    minnum=i;
    }
    p=p->next;
    }
    ListDelete_L(L,minnum,result);
    cout<<"你删除的元素为"<<result<<endl;
    }
    void vist_L(LinkList L)
    {
    LNode *p=L->next;
    while(p)
    {
    cout<<p->data<<"";
    p=p->next;
    }
    cout<<endl;
    }
    void main()
    {
    LinkList L;
    InitList_L(L);
    ListCreat_L(L,5);
    FindMin(L);
    vist_L(L);


    }



  • 相关阅读:
    MyBatis的#{}和${}区别
    java集合
    AcWing第2周周赛题解
    AcWing第1场周赛题解
    AcWing第2场热身赛题解
    AcWing第1场热身赛题解
    AcWing第3场周赛题解
    湖仓一体天花板,大数据一站式交互式SQL分析技术
    从1天→10分钟,华为云DRS在背后做了这些
    [导入]童趣
  • 原文地址:https://www.cnblogs.com/gaoteng/p/2350396.html
Copyright © 2020-2023  润新知