循环单链表区间删除
来源:互联网 发布:项目管理 知乎 编辑:程序博客网 时间:2024/05/15 23:13
6-1 循环单链表区间删除(15 分)
本题要求实现带头结点的循环单链表的创建和单链表的区间删除。L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于max的链表元素。
函数接口定义:
Status ListCreate_CL(LinkList &CL); void ListDelete_CL(LinkList &CL,ElemType min,ElemType max);
裁判测试程序样例:
//库函数头文件包含#include<stdio.h>#include<malloc.h>#include<stdlib.h>//函数状态码定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType; //假设线性表中的元素均为整型 typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; //循环单链表类型定义与单链表定义相同,区别在尾节点next取值Status ListCreate_CL(LinkList &CL); void ListDelete_CL(LinkList &CL, ElemType min, ElemType max);void ListPrint_CL(LinkList &CL) { //输出单链表,空表时输出Empty List。 LNode *p=CL->next; //p指向第一个元素结点 if(p==CL){ printf("Empty List"); return; } while(p!=CL) { if(p->next!=CL) printf("%d ",p->data); else printf("%d",p->data); p=p->next; } } int main() { LinkList CL; ElemType min,max; if(ListCreate_CL(CL)!= OK) { printf("循环链表创建失败!!!\n"); return -1; } scanf("%d%d",&min,&max); ListDelete_CL(CL,min,max); ListPrint_CL(CL); return 0;}/* 请在这里填写答案 */
输入格式:第一行输入一个整数n,表示循环单链表中元素个数,接下来一行共n个整数,中间用空格隔开。第三行输入min和max。
输出格式:输出删除后循环链表的各个元素,两个元素之间用空格隔开,最后一个元素后面没有空格。
输入样例:
61 2 3 4 5 62 5
输出样例:
1 2 5 6
#include<stdio.h>#include<malloc.h>#include<stdlib.h>//函数状态码定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType; //假设线性表中的元素均为整型typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList; //循环单链表类型定义与单链表定义相同,区别在尾节点next取值Status ListCreate_CL(LinkList &CL);void ListDelete_CL(LinkList &CL, ElemType min, ElemType max);void ListPrint_CL(LinkList &CL);Status ListCreate_CL(LinkList &CL){ int n; scanf("%d", &n);//存入单链表元素个数 LNode *rearPtr, *curPtr;// 真实指针,和临时指针 CL = (LNode *)malloc(sizeof(LNode)); CL->next = NULL; rearPtr = CL; //创建头节点,尾指针指向自己 int i; for(i = 1; i <= n; i++) { curPtr = (LNode *)malloc(sizeof(LNode)); scanf("%d", &curPtr->data); if(!curPtr) exit(OVERFLOW); //如果内存开辟不出来,就退出程序, rearPtr->next = curPtr; rearPtr = curPtr; //把指针的位置往下移动一个位置 } rearPtr->next = CL; //最后一个节点的尾指针指回头节点,完成循环 return OK;}void ListDelete_CL(LinkList &CL, ElemType mmin, ElemType mmax){ LNode *p = CL->next, *q; while(p->next !=CL) { q = p->next; if(q->data > mmin && q->data < mmax) p->next = q->next; else p = p->next; }}void ListPrint_CL(LinkList &CL){ LNode *p = CL->next; //p指向第一个元素结点 if(p == CL)//若第一个元素节点等于头节点,则为空表 { printf("Empty List"); return ; } while(p != CL)//只要指针不是头节点,则还有元素未输出 { if(p->next != CL) printf("%d ",p->data); else printf("%d",p->data); p = p->next; }}int main(){ LinkList CL; ElemType min,max; if(ListCreate_CL(CL)!= OK) { printf("循环链表创建失败!!!\n"); return -1; } scanf("%d%d",&min,&max); ListDelete_CL(CL,min,max); ListPrint_CL(CL); return 0;}
以上。
阅读全文
0 0
- 循环单链表区间删除
- 循环单链表区间删除
- PTA 循环单链表区间删除
- 6-1 循环单链表区间删除
- 6-1 循环单链表区间删除(15 分)
- 6-1 循环单链表区间删除(15 分)PTA
- PTA 数据结构 6-1 循环单链表区间删除
- PTA 6-1 循环单链表区间删除(15 分)
- PTA 6-1 循环单链表区间删除(15 分)
- 伸展树(区间加值,反转,循环移动,插入,删除区间,求区间最小值)poj3580
- poj 3580 区间翻转、插入、删除、循环位移
- splay区间翻转及删除区间,平移区间
- 新技能:splay支持区间翻转,区间插入,区间删除
- 【数据结构SPLAY】splay区间翻转,区间和查询,区间插入,区间删除,区间修改
- 【BZOJ1503】Splay 区间删除 (1)
- 循环删除表记录
- 循环链表内节点删除
- vector中循环删除
- 用wordpress搭建个人博客
- java日常学习:jar包
- <转载> Java(16):泛型讲解
- java 中“==”与“equal” 的区别
- [模板]高精度
- 循环单链表区间删除
- git和TortoiseGit的安装和使用
- 显卡概述
- 51nod 1094 和为k的连续区间 map优化
- 用Java搭建一个简单的本地服务器
- 剑指offer------动态规划与贪婪算法
- 用户登录界面
- 15. 3Sum
- PNP : Chat server