`

删除不减链表L中大于mink小于maxk的元素

阅读更多

 

源代码:

 

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define NULL 0
#define OK 1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;

 //-----单链表的存储结构-----//
typedef struct LNode{
    ElemType data;         //数据域
    struct LNode * next;    //指针域
}LNode,*LinkList;

void CreastList_L(LinkList &L,int n){
	//创建带头结点的单链表L
	LNode *p,*q;
	int i;
	L=(LNode*)malloc(sizeof (LNode));
	L->next=NULL;   //先建立一个带头结点的单链表
	p=L;
	for (i=1;i<=n;i++){
		q=(LNode*)malloc(sizeof(LNode)); //生成新结点
		if(!p) exit(OVERFLOW);
		printf("Input the %dth data:",i);
		scanf("%d",&q->data);   //输入元素值
		q->next=NULL;
		p->next=q;
		p=q;
	}
}


Status  ListPartDelete_L(LinkList &L,ElemType mink,ElemType maxk){
	//删除不减链表L中大于mink小于maxk的元素,删除后并释放这些元素的空间
	LNode *p,*q;
    p=L;   //p最初指向头结点
    q=L->next;
    while(q!=NULL&&q->data<mink){
        p=p->next; q=q->next;
    }
    if(q==NULL)return OK; 
    while(q!=NULL&&q->data<=maxk){
        p->next=q->next;
        free(q);
        q=p->next;
    }
    return OK;
}

void PrintList(LinkList &L){
	//输出单链表
	LNode *p=L->next;
		while(p!=NULL){
			printf("%d",p->data);
			p=p->next;
		}
}


void main(){
	int n,mink , maxk;
	LinkList La;
	printf("Input the list  num:");
	scanf("%d",&n);
	CreastList_L(La,n);
	printf("Before Delete the list is:  ");
	PrintList(La);
	printf("\n");
	printf("please input the mink :\n ");
	scanf("%d",&mink);    //输入mink
	printf("please input the maxk:\n ");
	scanf("%d",&maxk);	 //输入maxk
	ListPartDelete_L(La, mink, maxk);
	printf("\nAfter Delete the list is:  ");
	PrintList(La);
	printf("\n");

}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics