3Key 2022-09-27 20:58 采纳率: 0%
浏览 145

计一个算法,删除元素递增排列的顺序表或链表L中值大于mink且小于maxk的所有元素。

计一个算法,删除元素递增排列的顺序表或链表L中值大于mink且小于maxk的所有元素。

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-09-27 23:47
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    typedef int ElemType;
    typedef struct LNode
    {
        ElemType data;
        struct LNode* next;
    }LNode, * pLinkList;
    
    //创建带有头结点的空链表
    pLinkList SetNullList_Link()
    {
        pLinkList head = (pLinkList)malloc(sizeof(LNode));
        if (head != NULL)
            head->next = NULL;
        else
            printf("申请头节点空间失败!\n");
        return head;
    }
    
    //产生一组随机数建立单链表并对单链表排序。
    void CreatSortList(pLinkList L, int length)
    {
        LNode* p, * pre, * s;
        for (int i = 1; i <= length; i++)
        {
            p = (LNode*)malloc(sizeof(LNode));
            p->data = rand() % 100 + 1;
            p->next = NULL;
            if (!L->next) {//第一个结点,直接链入链表 L
                L->next = p;
            }
            else { //第二个结点开始,排序后链入链表 L
                pre = L;
                while (pre->next != NULL && pre->next->data < p->data) {
                    pre = pre->next;
                }
                p->next = pre->next;
                pre->next = p;
            }
        }
    }
    
    //将有序单链表L中属于区间(mink, maxk)的元素删除。
    void IntervalList(pLinkList L, ElemType mink, ElemType maxk)
    {
        if (mink > maxk)
            maxk += mink, mink = maxk - mink, maxk = maxk - mink;
        LNode* pL = L->next, * pt = L, * tail = NULL;
        while (pL && pL->data <= mink){
            pt = pL;
            pL = pL->next;
        }
        while (pL && pL->data < maxk){
            tail = pL;
            pL = pL->next;
        }
        if (tail) {//(mink,maxk)区间在 L 链表数据区间内
            tail = tail->next; pL = NULL;
            while (pt->next != tail){
                pL = pt->next;
                pt->next = pL->next;
                free(pL);
            }
        }
    }
    
    void printList(pLinkList list)
    {
        pLinkList tmp = list->next;
        int i = 0;
        if (!tmp) {
            printf("NULL");
        }
        else {
            while (tmp)
            {
                printf("%d ", tmp->data);
                tmp = tmp->next;
            }
        }
        printf("\n");
    }
     
    int main()
    {
        srand((unsigned int)time(NULL));
        ElemType mink, maxk;
        pLinkList L = NULL;
    
        L = SetNullList_Link();
        CreatSortList(L, 10);
        printList(L);
    
        printf("请输入删除元素数据区间的左值:");
        scanf("%d", &mink);
        printf("请输入删除元素数据区间的右值:");
        scanf("%d", &maxk);
    
        IntervalList(L, mink, maxk);
        printList(L);
      
        return 0;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 9月27日