作业2 链式存储结构及其操作
来源:互联网 发布:微博上网络红猫 编辑:程序博客网 时间:2024/06/01 08:10
作业2
设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:(1分)
不带表头附加结点的单链表为空的判断条件是头指针head满足条件()。 (1分)
线性表若采用链式存储结构时,要求内存中可用存储单元的地址 (1分)
线性表采用链式存储时,其地址()。 (1分)
可以用带表头附加结点的链表表示线性表,也可以用不带头结点的链表表示线性表,前者最主要的好处是()。 (1分)
以下关于链式存储结构的叙述中,()是不正确的。 (1分)
线性表L在什么情况下适用于使用链式结构实现? (1分)
链表不具有的特点是: (1分)
在单链表中,若p
所指的结点不是最后结点,在p
之后插入s
所指结点,则执行 (1分)
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){ //输出单链表,空表时输出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;}/* 请在这里填写答案 */Status ListCreate_CL(LinkList &CL){ int n; scanf("%d",&n); LNode *curPtr,*rearPtr; CL = (LNode*)malloc(sizeof(LNode)); if(!CL) exit(OVERFLOW); CL->next = NULL; rearPtr = CL; for(int i=0;i<n;++i) { curPtr = (LNode *)malloc(sizeof(LNode)); if(!curPtr) exit(OVERFLOW); scanf("%d",&curPtr->data); rearPtr ->next = curPtr; rearPtr = curPtr; } rearPtr->next = CL; return OK;}void ListDelete_CL(LinkList &CL,ElemType min,ElemType max){ LNode *p; LNode *curPtr; p=CL; curPtr = CL->next; while(curPtr->next != CL) { if(curPtr->data>min&&curPtr->data<max) { if(p==CL) { CL->next = curPtr->next; curPtr = curPtr->next; } else { p->next = curPtr->next; curPtr = curPtr->next; } } else { p = p->next; curPtr = curPtr->next; } }}
6-2 单链表元素定位(12 分)
本题要求在链表中查找第一个数据域取值为x的节点,返回节点的位序。L是一个带头结点的单链表,函数ListLocate_L(LinkList L, ElemType x)要求在链表中查找第一个数据域取值为x的节点,返回其位序(从1开始),查找不到则返回0。例如,原单链表各个元素节点的元素依次为1,2,3,4,则ListLocate_L(L, 1)返回1,ListLocate_L(L, 3)返回3,而ListLocate_L(L, 100)返回0。
函数接口定义:
int ListLocate_L(LinkList L, ElemType x);
其中 L
是一个带头节点的单链表。 x
是一个给定的值。函数须在链表中查找第一个数据域取值为x的节点。若找到则返回其位序(从1开始),找不到则返回0。
裁判测试程序样例:
//库函数头文件包含#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;Status ListCreate_L(LinkList &L,int n){ LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针 L=(LNode*)malloc(sizeof (LNode)); if(!L)exit(OVERFLOW); L->next=NULL; //先建立一个带头结点的单链表 rearPtr=L; //初始时头结点为尾节点,rearPtr指向尾巴节点 for (int i=1;i<=n;i++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后 curPtr=(LNode*)malloc(sizeof(LNode));//生成新结点 if(!curPtr)exit(OVERFLOW); scanf("%d",&curPtr->data);//输入元素值 curPtr->next=NULL; //最后一个节点的next赋空 rearPtr->next=curPtr; rearPtr=curPtr; } return OK;}//下面是需要实现的函数的声明int ListLocate_L(LinkList L, ElemType x);int main(){ LinkList L; int n; int x,k; scanf("%d",&n); //输入链表中元素个数 if(ListCreate_L(L,n)!= OK) { printf("表创建失败!!!\n"); return -1; } scanf("%d",&x); //输入待查找元素 k=ListLocate_L(L,x); printf("%d\n",k); return 0;}/* 请在这里填写答案 */
输入样例:
41 2 3 41
输出样例:
1
//库函数头文件包含#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;Status ListCreate_L(LinkList &L,int n){ LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针 L=(LNode*)malloc(sizeof (LNode)); if(!L)exit(OVERFLOW); L->next=NULL; //先建立一个带头结点的单链表 rearPtr=L; //初始时头结点为尾节点,rearPtr指向尾巴节点 for (int i=1;i<=n;i++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后 curPtr=(LNode*)malloc(sizeof(LNode));//生成新结点 if(!curPtr)exit(OVERFLOW); scanf("%d",&curPtr->data);//输入元素值 curPtr->next=NULL; //最后一个节点的next赋空 rearPtr->next=curPtr; rearPtr=curPtr; } return OK;}//下面是需要实现的函数的声明int ListLocate_L(LinkList L, ElemType x);int main(){ LinkList L; int n; int x,k; scanf("%d",&n); //输入链表中元素个数 if(ListCreate_L(L,n)!= OK) { printf("表创建失败!!!\n"); return -1; } scanf("%d",&x); //输入待查找元素 k=ListLocate_L(L,x); printf("%d\n",k); return 0;}/* 请在这里填写答案 */int ListLocate_L(LinkList L, ElemType x){ LinkList P = L; int i = 0; while(P&&P->data!=x) { P = P->next; i++; } if(!P) return 0; else return i;}
- 作业2 链式存储结构及其操作
- 第一章作业3-链式存储结构及其操作
- 栈的链式存储结构及其运算
- 栈的链式存储结构与操作
- 队列的链式存储结构与操作
- 栈的链式存储结构与操作
- 队列的链式存储结构与操作
- 串的链式存储结构操作
- 线性表单链式存储结构的操作
- 桟的链式存储结构分部操作
- 第7周实践项目2 队列的链式存储结构及其基本运算的实现
- 栈的链式存储结构及其基本运算的实现
- 栈的链式存储结构及其基本运算实现
- 栈的链式存储结构及其基本运算的实现
- 栈的链式存储结构及其基本运算实现
- 栈的链式存储结构及其基本运算的实现
- 栈——链式存储结构及其基本运算
- 队列——链式存储结构及其基本运算
- Python调用gdal_translate工具进行影像批处理
- Android练手小项目
- Android zxing扫描后出现 FAILED BINDER TRANSACTION...
- 什么情况下Java对象才是已经死亡?
- php运算符与流程控制 循环控制
- 作业2 链式存储结构及其操作
- ButterKnife使用报错问题
- Unity3D 游戏贴图(法线贴图,漫反射贴图,高光贴图)
- 线程池的使用
- http 缓存分为客户端缓存和服务端缓存
- PHP面向对象错误处理笔记
- 如何通过SD给BeagleboneBlack安装ubuntu操作系统
- Python笔记 NO.1
- 分答项目_技能点:json字符串