源代码:
#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"); }