oj2986删除指定区间内的数据(链表操作)

来源:互联网 发布:dna怎么入公安数据库 编辑:程序博客网 时间:2024/06/15 09:49
问题描述:删除指定区间内的数据(链表操作)
作者:何知令

完成时间:2017年4月25日

代码:

/*问题描述:删除指定区间内的数据(链表操作)作者:何知令完成时间:2017年4月25日*/#include <stdio.h>#include <stdlib.h>int a[10000];typedef int ElemType;typedef struct LNode//单链表结构体{    ElemType data;    struct LNode *next;} LinkList;void IinitList(LinkList *L)//创建单链表的表头{    L->next=NULL;}void InitList(LinkList *L){    L=(LinkList *)malloc(sizeof(LinkList));    L->next=NULL;}void CreateList(LinkList *L,ElemType a[],int n)//初始化单链表{    LinkList *s,*r;    int i;    r=L;    for(i=0; i<n; i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        r->next=s;        r=s;    }    r->next=NULL;}void DispList(LinkList *L)//遍历单链表,输出其上每一个元素{    LinkList *p=L->next;    while(p!=NULL)    {        printf("%d ",p->data);        p=p->next;    }}int DeleteList(LinkList *L,int min,int max)//删除相同元素{    LinkList *q=L,*p;//p和q均指向第一节点    while(q!=NULL&&q->next!=NULL)    {        if(q->next->data>=min&&q->next->data<=max)//q指向的当前节点数据与p指向的当前节点数据相同时执行删除操作        {            p=q->next;//设置一指针指向该位置            q->next=q->next->next;//指针转移            free(p);//删除操作        }        else            q=q->next;    }    return 1;}int main(){    int i;    int n;    int min,max;    LinkList L;    scanf("%d",&n);    for(i=0; i<n; i++)        scanf("%d",&a[i]);    scanf("%d %d",&min,&max);    IinitList(&L);    CreateList(&L,a,n);    if(DeleteList(&L,min,max))        DispList(&L);    return 0;}
程序运行结果展示:

知识点总结:数据结构

学习心得:这个题没按要求去做,C++还是与C有一定差距

0 0
原创粉丝点击