Status ListDelete_L(LinkList &L,ElemType mink,ElemType maxk) {//这个算法实现了每移动一次辅助指针p,就释放空间。 LinkList p,q,prev=NULL; if(mink>maxk)return ERROR; p=L; prev=p; p=p->next; while(p&&p->data<maxk){ if(p->data<=mink){ prev=p; p=p->next; } else{ prev->next=p->next; q=p; p=p->next; free(q); } } return OK; }
递增单链表删除所有大于mink且小于maxK的元素。
#include <stdio.h> #include <stdlib.h> #include <conio.h> typedef int ElemType; #define ERROR -1 #define OK 1 typedef struct LNode { ElemType data; LNode *next; }LNode,*LinkList; void CreateList(LinkList &L,int n) { LinkList p; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; for(int i=n;i>0;i--) { p=(LinkList)malloc(sizeof(LNode)); printf("请输入第%d个元素\n",i); scanf("%d",&p->data); p->next=L->next; L->next=p; } } //时间复杂度O(n),空间复杂度O(2),该算法对于释放空间的处理不好。 void CutFun(LinkList &L,int mink,int maxk) { LinkList p,q; q=p=L; while(q->next->data<=maxk) { if (q->next!=NULL&&p->next->data<=mink) { q=p=p->next; } if (q->next!=NULL&&q->next->data>mink&&q->next->data<=maxk) { q=q->next; } if (q->next==NULL) { q=NULL;//后面的都不要了 break; } } p->next=q; } void main() { LinkList L,p; int n,mink,maxk; printf("输入元素个数:\n"); scanf("%d",&n); CreateList(L,n); printf("输出元素:\n"); p=L->next; while(p) { printf("%d ",p->data); p=p->next; } printf("\n输入大于的最小值与小于的最大值\n"); scanf("%d%d",&mink,&maxk); CutFun(L,mink,maxk); printf("输出元素:\n"); p=L->next; while(p) { printf("%d ",p->data); p=p->next; } getch(); }
递增单链表删除所有大于mink且小于maxK的元素。
最新推荐文章于 2024-08-12 10:43:03 发布