线性表练习题答案

线性表练习题答案
线性表练习题答案

int count (head, x)

{

/*本题中head 为链头指针,不含头结点*/ node *p;

int n=0;

p=head;

while (p!=NULL)

{

if (p->data= =x) n++;

p=p->next;

}

return(n);

}

第2章线性表习题解析(答)

第二章线性表练习题 一、选择题 1.线性表是具有n个的有限序列。 A、表元素 B、字符 C、数据元素 D、数据项 E、信息项 2.线性表的静态链表存储结构与顺序存储结构相比优点是。 A、所有的操作算法实现简单 B、便于随机存储 C、便于插入和删除 D、便于利用零散的存储器空间 3.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素算法的时间复杂度为。 A、O(log2n) B、O(1) C、O(n) D、O(n2) 4.(1)静态链表既有顺序存储的特点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关; (2)静态链表中能容纳元素个数的最大数在定义时就确定了,以后不能增加;(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。 以上错误的是。 A、(1)、(2) B、(1) C、(1)、(2)、(3) D、(2) 6.在双向链表存储结构中,删除p所指的结点时须修改指针。 A、p->next->prior=p->prior; p->prior->next=p->next; B、p->next=p->next->next;p->next->prior=p; C、p->prior->next=p;p->prior=p->prior->prior; D、p->prior=p->next->next;p->next=p->prior->prior;

7.在双向循环链表中,在P指针所指的结点后插入q所指向的新结点,其修改指针的操作是。 A、p->next=q; q->prior=p;p->next->prior=q;q->next=q; B、p->next=q;p->next->prior=q;q->prior=p;q->next=p->next; C、q->prior=p; q->next=p->next; p->next->prior=q; p->next=q; D、q->next=p->next;q->prior=p;p->next=q;p->next=q; 8.将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是。 A、 n b、2n-1 c、2n d、n-1 9.在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动个元素。 A、n-i B、n-i+1 C、n-i-1 D、i 10.线性表L=(a1,a2,……an),下列说法正确的是。 A、每个元素有有一个直接前驱和一个直接后继 B、线性表中至少有一个元素 C、表中诸元素的排列必须是由小到大或由大到小。 D、除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。 11.对单链表表示法,以下说法错误的是。 A、数据域用于存储线性表的一个数据元素 B、指针域(或链域)用于存放一指向本结点所含数据元素的直接后继所在结点的指针 C、所有数据通过指针的链接而组织成单链表 D、NULL称为空指针,它不指向任何结点只起标志作用

第2章 线性表习题参考答案

习题二参考答案 一、选择题 1. 链式存储结构的最大优点是( D )。 A.便于随机存取 B.存储密度高 C.无需预分配空间 D.便于进行插入和删除操作 2. 假设在顺序表{a 0,a 1,……,a n -1}中,每一个数据元素所占的存储单元的数目为4,且第0个数据元素的存储地 址为100,则第7个数据元素的存储地址是( D )。 A. 106 B. 107 C.124 D.128 3. 在线性表中若经常要存取第i 个数据元素及其前趋,则宜采用( A )存储方式。 A.顺序表 B. 带头结点的单链表 C.不带头结点的单链表 D. 循环单链表 4. 在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用( C )存储方 式。 A. 顺序表 B. 用头指针标识的循环单链表 C. 用尾指针标识的循环单链表 D. 双向链表 5. 在一个单链表中的p 和q 两个结点之间插入一个新结点,假设新结点为S,则修改链的java 语句序列是( D )。 A. s.setNext(p); q.setNext(s); B. p.setNext(s.getNext()); s.setNext(p); C. q.setNext(s.getNext()); s.setNext(p); D. p.setNext(s); s.setNext(q); 6. 在一个含有n 个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( C )。 A. O (1) B. O (log 2n) C. O (n) D. O (n2) 7. 要将一个顺序表{a 0,a 1,……,a n-1}中第i 个数据元素a i (0≤i ≤n-1)删除,需要移动( B )个数据元素。 A. i B. n-i-1 C. n-i D. n-i+1 8. 在带头结点的双向循环链表中的p 结点之后插入一个新结点s ,其修改链的java 语句序列是( D )。 A. p.setNext(s); s.setPrior(p); p.getNext().setPrior(s); s.setNext(p.getPrior()); B. p.setNext(s); p.getNext().setPrior(s); s.setPrior(p); s.setNext(p.getNext()); C. s.setPrior(p); s.setNext(p.getNext()); p.setNext(s); p.getNext().setPrior(s); D. s.setNext(p.getNext()); s.setPrior(p); p.getNext().setPrior(s); p.setNext(s); 9. 顺序表的存储密度是( B ),而单链表的存储密度是( A )。 A .小于1 B. 等于1 C. 大于1 D. 不能确定 10. 对于图2.29所示的单链表,下列表达式值为真的是( D )。 图2.29 单链表head 的存储结构图 A. head.getNext().getData()=='C' B. head.getData()=='B' C. P 1.getData()==’D ’ D. P 2.getNext()==null 二、填空题 1. 线性表是由n (n ≥0)个数据元素所构成的 有限序列 ,其中n 为数据元素的个数,称为线性表的 长度 ,

线性规划典型例题

例1:生产计划问题 某工厂明年根据合同,每个季度末向销售公司提供产品,有关信息如下表。若当季生产的产品过多,季末有积余,则一个季度每积压一吨产品需支付存贮费O.2万元。现该厂考虑明年的最佳生产方案,使该厂在完成合同的情况下,全年的生产费用最低。试建立模型。 解: 法1 设每个季度分别生产x1,x2,x3,x4 则要满足每个季度的需求x4≥26 x1+ x2≥40 x1+ x2+ x3≥70 x1+ x2+ x3+ x4=80 考虑到每个季度的生产能力 0≤x1≤30 0≤x2≤40 0≤x3≤20 0≤x4≤10 每个季度的费用为:此季度生产费用+上季度储存费用 第一季度15.0x1 第二季度14 x2 0.2(x1-20) 第三季度15.3x3+0.2(x1+ x2-40) 第四季度14.8x4+0.2(x1+ x2+ x3-70)

工厂一年的费用即为这四个季度费用之和, 得目标函数;minf=15.6 x1+14.4 x2+15.5 x3+14.8 x4-26 s.t.x1+ x2≥40 x1+ x2+ x3≥70 x1+ x2+ x3+ x4=80 20≤x1≤30 0≤x2≤40 0≤x3≤20 0≤x4≤10。 法2:设第i季度生产而用于第j季度末交货的产品数量为xij吨 根据合同要求有: xll=20 x12+x22=20 x13+x23+x33=30 x14+x24+x34+x44=10 又根据每季度的生产能力有: xll+x12+x13+x14≤30 x22+x23+x24≤40 x33+x34≤20 x44≤10 第i季度生产的用于第j季度交货的每吨产品的费用cij=dj+0.2(j-i),于是,有线性规划模型。 minf=15.Oxll+15.2x12+15.4xl3+15.6xl4+14x22+14.2x23+14.4x24+15.3 x33+15.5x34+14.8x44 s.t. xll=20, x12+x22=20, x13+x23+x13=30, x14+x24+x34+x44=10, x1l+x12+x13+x14≤30, x22+x23+x24≤40, x33+x34≤20,

线性表练习题(答案)

第2章线性表 一选择题 下列程序段的时间复杂度为( C )。 for( int i=1;i<=n;i++) for( int j=1;j<= m; j++) A[i][j] = i*j ; A. O(m2) B. O(n2) C. O(m*n) D. (m+n) 下面关于线性表的叙述中,错误的是哪一个?(B ) A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 线性表是具有n个( C )的有限序列(n>0)。 A.表元素B.字符C.数据元素D.数据项 若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。 A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表 某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。 A.单链表B.仅有头指针的单循环链表 C.双链表D.仅有尾指针的单循环链表 设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。A. 单链表 B.单循环链表 C. 带尾指针的单循环链表 D.带头结点的双循环链表 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用( D )存储方式最节省运算时间。 A.单链表B.双链表C.单循环链表D.带头结点的双循环链表 链表不具有的特点是( B ) A.插入、删除不需要移动元素B.可随机访问任一元素 C.不必事先估计存储空间D.所需空间与线性长度成正比 下面的叙述不正确的是(B,C ) A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关 C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。 A. O(0) B. O(1) C. O(n) D. O(n2) 对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为(C )。 A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1) 线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为( C )A.O(i)B.O(1)C.O(n)D.O(i-1) 循环链表H的尾结点P的特点是(A )。 A.P->next=H B.P->next= H->next C.P=H D.P=H->next 完成在双循环链表结点p之后插入s的操作是(D );

数据结构实验报告 实验一 线性表链式存储运算的算法实现

昆明理工大学信息工程与自动化学院学生实验报告 (201 —201 学年第一学期) 课程名称:数据结构开课实验室:年月日年级、专业、班学号姓名成绩 实验项目名称线性表链式存储运算的算法实现指导教师 教 师 评语教师签名: 年月日 一.实验内容: 线性表链式存储运算的算法实现,实现链表的建立、链表的数据插入、链表的数据删除、链表的数据输出。 二.实验目的: 1.掌握线性表链式存储结构的C语言描述及运算算法的实现; 2.分析算法的空间复杂度和插入和删除的时间复杂度; 3.总结比较线性表顺序存储存储与链式存储的各自特点。 三.主要程序代码分析: LinkList creatListR1() //用尾插入法建立带头结点的单链表 { char *ch=new char(); LinkList head=(LinkList)malloc(sizeof(ListNode)); //生成头结点*head ListNode *s,*r,*pp; r=head; //尾指针初值指向头结点 r->next=NULL; scanf("%s",ch); //读入第一个结点的值 while(strcmp(ch,"#")!=0) { //输入#结束

pp=LocateNode(head,ch); if(pp==NULL) { s=(ListNode *)malloc(sizeof(ListNode)); //生成新的结点*s strcpy(s->data,ch); r->next=s; //新结点插入表尾 r=s; //尾指针r指向新的表尾 r->next=NULL; } scanf("%s",ch); //读入下一个结点的值 } return head; //返回表头指针 } int Insert(ListNode *head) //链表的插入 { ListNode *in,*p,*q; int wh; in=(ListNode *)malloc(sizeof(ListNode));in->next=NULL; //生成新结点p=(ListNode *)malloc(sizeof(ListNode));p->next=NULL; q=(ListNode *)malloc(sizeof(ListNode));q->next=NULL; scanf("%s",in->data); //输入插入的数据 scanf("%d",&wh); //输入插入数据的位置 for(p=head;wh>0;p=p->next,wh--); q=p->next; p->next=in; in->next=q; } void DeleteList(LinkList head,char *key) //链表的删除 { ListNode *p,*r,*q=head; p=LocateNode(head,key); //按key值查找结点的 if(p==NULL) exit(0); //若没有找到结点,退出 while(q->next!=p) //p为要删除的结点,q为p的前结点q=q->next; r=q->next; q->next=r->next; free(r); //释放结点*r } 四.程序运行结果:

第2章线性表习题解答

第2章线性表习题解答

第2章习题 (2) 第2章习题 2.1若将顺序表中记录其长度的分量listlen改为指向最后一个元素的位置last,在实现各基本运算时需要做那些修改? 【解】 //用线性表最后一个元素的下标last代替listLen实现顺序表 #define MAXLEN 100 typedef int elementType; typedef struct sllLast { elementType data[MAXLEN]; int last; }seqList; //初始化 void initialList(seqList &S)

{ https://www.360docs.net/doc/3516386106.html,st=-1; } //求表长度 int listLength(seqList S) { return https://www.360docs.net/doc/3516386106.html,st+1; } //按序号取元素 bool getElement(seqList S,int i,elementType &x) { if(i<1 || i>https://www.360docs.net/doc/3516386106.html,st+1) //i为元素编号,有效范围在https://www.360docs.net/doc/3516386106.html,st+1之间 return false; else { x=S.data[i-1];

return true; } } //查找元素x,成功:返回元素编号;失败:返回0 int listLocate(seqList S,elementType x) { int i; for(i=0;i<=https://www.360docs.net/doc/3516386106.html,st;i++) { if(S.data[i]==x) return i+1; //找到,转换为元素编号输出 } return 0; } //插入元素 int listInsert(seqList &S,elementType x, int i)

128499-管理运筹学-第二章线性规划-习题

11(2),12,14,18 习题 2-1 判断下列说法是否正确: (1) 任何线性规划问题存在并具有惟一的对偶问题; T (2) 对偶问题的对偶问题一定是原问题;T (3) 根据对偶问题的性质,当原问题为无界解时,其对偶问题无可行解,反之, 当对偶问题无可行解时,其原问题具有无界解;F (4) 若线性规划的原问题有无穷多最优解,则其对偶问题也一定具有无穷多最优 解; (5) 若线性规划问题中的b i ,c j 值同时发生变化,反映到最终单纯形表中,不会出 现原问题与对偶问题均为非可行解的情况; (6) 应用对偶单纯形法计算时,若单纯形表中某一基变量x i <0,又x i 所在行的元素全 部大于或等于零,则可以判断其对偶问题具有无界解。 (7) 若某种资源的影子价格等于k ,在其他条件不变的情况下,当该种资源增加 5个单位时,相应的目标函数值将增大5k ; (8) 已知y i 为线性规划的对偶问题的最优解,若y i >0,说明在最优生产计划中第 i 种资源已经完全耗尽;若y i =0,说明在最优生产计划中的第i 种资源一定有剩余。 2-2将下述线性规划问题化成标准形式。 ????? ? ?≥≥-++-≤+-+-=-+-+-+-=无约束 43 214321432143214321,0,,232142224.5243max )1(x x x x x x x x x x x x x x x x st x x x x z 2-3分别用图解法和单纯形法求解下述线性规划问题,并对照指出单纯形表中的各基 可行解对应图解法中可行()?????≥≤≤-+-=++-+-=无约束 321 3213213 21,0,06 24 .322min 2x x x x x x x x x st x x x z 域的哪一顶点。 ()??? ??≥≤+≤++=0,8259 43.510max 12 1212121x x x x x x st x x z ()??? ??≥≤+≤++=0,242615 53.2max 22 121212 1x x x x x x st x x z 2-4已知线性规划问题,写出其对偶问题: 5 43212520202410max x x x x x z ++++=

线性表练习题答案

一、判断题 1.线性表的逻辑顺序与存储顺序总是一致的。(FALSE) 2.顺序存储的线性表可以按序号随机存取。(TRUE) 3.顺序表的插入和删除一个数据元素,每次操作平均只有近一半的元素需要移动。(TRUE) 4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。(TRUE) 5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。(FALSE) 6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(TRUE)7.线性表的链式存储结构优于顺序存储结构。(FALSE) 8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。(TRUE) 9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(TRUE)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(FALSE) 二、单选题、(请从下列A,B,C,D选项中选择一项) 11.线性表是( ) 。 (A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空; (C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。 答:A 12.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等 概率的。插入一个元素时平均要移动表中的()个元素。 (A) n/2 (B) (n+1)/2 (C) (n –1)/2 (D) n 答:A 13.线性表采用链式存储时,其地址( D ) 。 (A) 必须是连续的;(B) 部分地址必须是连续的; (C) 一定是不连续的;(D) 连续与否均可以。 答:D 14.用链表表示线性表的优点是()。 (A)便于随机存取 (B)花费的存储空间较顺序存储少 (C)便于插入和删除 (D)数据元素的物理顺序与逻辑顺序相同 答:C 15. 某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。 (A)单链表 (B)双链表 (C)单循环链表

数据结构_实验1_线性表的基本操作

实验1 线性表的基本操作 一、需求分析 目的: 掌握线性表运算与存储概念,并对线性表进行基本操作。 1.初始化线性表; 2.向链表中特定位置插入数据; 3.删除链表中特定的数据; 4.查找链表中的容; 5.销毁单链表释放空间; 二、概要设计 ●基础题 主要函数: 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 实验步骤: 1,初始化顺序表 2,调用插入函数 3,在顺序表中查找指定的元素 4,在顺序表中删除指定的元素 5,在顺序表中删除指定位置的元素 6,遍历并输出顺序表 ●提高题

要求以较高的效率实现删除线性表中元素值在x到y(x和y自定义)之间的所有元素 方法: 按顺序取出元素并与x、y比较,若小于x且大于y,则存进新表中。 编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。 方法: 分别按顺序取出L1,L2的元素并进行比较,若相等则将L1元素放进L中,否则将L 1,L2元素按顺序放进L。 本程序主要包含7个函数 主函数main() 初始化线性表InitList(List* L,int ms) 向顺序表指定位置插入元素InsertList(List* L,int item,int rc)删除指定元素值的顺序表记录DeleteList1(List* L,int item) 删除指定位置的顺序表记录 DeleteList2(List* L,int rc) 查找顺序表中的元素 FindList(List L,int item) 输出顺序表元素OutputList(List L) 提高题的程序 void Combine(List* L1,List* L2,List* L) void DeleteList3(List* L,int x,int y) 二、详细设计 初始化线性表InitList(List* L,int ms) void InitList(List* L,int ms) { L->list=(int*)malloc(LIST_INIT_SIZE*sizeof(int)); L->size=0; L->MAXSIZE=LIST_INIT_SIZE;

2.线性表习题答案

1、基于单链表写出向线性表的末尾添加一个元素的算法。 Status Insert(LinkList L,ElemType e) { LinkList p,q; q=L; p=(LinkList)malloc(sizeof(LNode));//为元素开辟空间 if(p==null) return error; p->data=e; while(q->next) q=q->next;//使p指向最后一个节点 p->next=q->next;//插入p节点 q->next=p; return ok; } 2、若L为有序表,基于单链表写出算法,使得向L中插入一个元素e后依然有序。 Status InsertInOrder_L(LinkList &L,ElemType e) { LinkList p,q,s; q=L; p=L->next s=(LinkList)malloc(sizeof(LNode));//为元素开辟空间 if(s==null) return error; s->data=e; while( p != NULL ) { if( s->value >= p->value ) // 找到了s该插入的位置,并且此时p,q已记录下要插入的位置 break else q = p; p = p->next; } // 将s节点插入到q,p节点之间 s->next = p; q->next = s; return ok; } 3、基于单链表写出删除线性表尾元素的算法。 Status DeleteRear_L(LinkList &L,ElemType &e) { LinkList p,q, P=L; Q=L->next;

(完整版)简单的线性规划问题(附答案)

简单的线性规划问题 [ 学习目标 ] 1.了解线性规划的意义以及约束条件、目标函数、可行解、可行域、最优解等基本概念 .2. 了解线性规划问题的图解法,并能应用它解决一些简单的实际问题. 知识点一线性规划中的基本概念 知识点二线性规划问题 1.目标函数的最值 线性目标函数 z=ax+by (b≠0)对应的斜截式直线方程是 y=-a x+z,在 y 轴上的 截距是z, b b b 当 z 变化时,方程表示一组互相平行的直线. 当 b>0,截距最大时, z 取得最大值,截距最小时, z 取得最小值; 当 b<0,截距最大时, z 取得最小值,截距最小时, z 取得最大值. 2.解决简单线性规划问题的一般步骤在确定线性约束条件和线性目标函数的前提下,解决简单线性规划问题的步骤可以概括为:“画、移、求、答”四步,即, (1)画:根据线性约束条件,在平面直角坐标系中,把可行域表示的平面图形准确地画出来,可行域可以是封闭的多边形,也可以是一侧开放的无限大的平面区域.(2)移:运用数形结合的思想,把目标函数表示的直线平行移动,最先通过或最后通过的顶点 (或边界 )便是最优解. (3)求:解方程组求最优解,进而求出目标函数的最大值或最小值. (4)答:写出答案.

知识点三简单线性规划问题的实际应用 1.线性规划的实际问题的类型 (1)给定一定数量的人力、物力资源,问怎样运用这些资源,使完成的任务量最大,收到的效益最大; (2)给定一项任务,问怎样统筹安排,使完成这项任务耗费的人力、物力资源量最小.常见问题有: ①物资调动问题例如,已知两煤矿每年的产量,煤需经两个车站运往外地,两个车站的运输能力是有限的,且已知两煤矿运往两个车站的运输价格,煤矿应怎样编制调动方案,才能使总运费最小? ②产品安排问题例如,某工厂生产甲、乙两种产品,每生产一个单位的甲种或乙种产品需要的A、B、C 三种 材料的数量,此厂每月所能提供的三种材料的限额都是已知的,这个工厂在每个月中应如何安排这两种产品的生产,才能使每月获得的总利润最大? ③下料问题例如,要把一批长钢管截成两种规格的钢管,应怎样下料能使损耗最小?2.解答线性规划实际应用题的步骤 (1)模型建立:正确理解题意,将一般文字语言转化为数学语言,进而建立数学模型,这需要在学习有关例题解答时,仔细体会范例给出的模型建立方法. (2)模型求解:画出可行域,并结合所建立的目标函数的特点,选定可行域中的特殊点作为最优解. (3)模型应用:将求解出来的结论反馈到具体的实例中,设计出最佳的方案. 题型一求线性目标函数的最值 y≤2, 例 1 已知变量 x,y 满足约束条件 x+y≥1,则 z=3x+y 的最大值为 ( ) x-y≤1, A . 12 B .11 C .3 D .- 1 答案 B 解析首先画出可行域,建立在可行域的基础上,分析最值点,然后通过解方程组得最值点 的坐标,代入即可.如图中的阴影部分,即为约束条件对应的可行域,当直线y=-3x+z 经 y=2,x= 3,

线性表练习题

一、火车出栈序列 (train.pas) 【题目描述】 输入n(n列火车),输出火车出栈的所有可能顺序。 【输入样例】 3 【输出样例】 3 2 1 2 3 1 2 1 3 1 3 2 1 2 3 【数据规模】 3<=n<=12 二、括号匹配 (LongestRegularBracketsSequence.pas) 【题目描述】 对一个由(,),[,]括号组成的字符串,求出其中最长的括号匹配子串。具体来说,满足如下条件的字符串称为括号匹配的字符串:1.(),[]是括号匹配的字符串 2.若A是括号匹配的串,则(A),[A]是括号匹配的字符串 3.若A,B是括号匹配的字符串,则AB也是括号匹配的字符串。例如,(),[],([]),()()都是括号匹配的字符串,而][,[()],(]则不是。 字符串A的子串是指由A中连续若干个字符组成的字符串。 例如:A,B,C,ABC,CAB,ABCABC都是ABCABC的子串空串是任何字符串的子串。 【输入格式】 输入一行,为一个仅由()[]组成的非空字符串。 【输出格式】 输入也仅有一行,为最长的括号匹配子串。若有相同长度的子串,

输出位置靠前的子串。 【数据规模】 对20%的数据,字符串长度<=100; 对50%的数据,字符串长度<=10,000; 对100%的数据,字符串长度<=1,000,000; 三、马的最短步数 (horse.pas) 【题目描述】 求马在棋盘上从某个起点到某个终点的最少步数。 【输入格式】 第一行,n,m,表示棋盘有n行m列;(2

第2章线性表习题解答

第2章习题 (1) 第2章习题 2.1若将顺序表中记录其长度的分量listlen改为指向最后一个元素的位置last,在实现各基本运算时需要做那些修改? 【解】 //用线性表最后一个元素的下标last代替listLen实现顺序表 #define MAXLEN 100 typedef int elementType; typedef struct sllLast { elementType data[MAXLEN]; int last; }seqList; //初始化 void initialList(seqList &S) { https://www.360docs.net/doc/3516386106.html,st=-1; } //求表长度 int listLength(seqList S) { return https://www.360docs.net/doc/3516386106.html,st+1; } //按序号取元素 bool getElement(seqList S,int i,elementType &x) { if(i<1 || i>https://www.360docs.net/doc/3516386106.html,st+1) //i为元素编号,有效范围在https://www.360docs.net/doc/3516386106.html,st+1之间 return false; else { x=S.data[i-1]; return true; }

} //查找元素x,成功:返回元素编号;失败:返回0 int listLocate(seqList S,elementType x) { int i; for(i=0;i<=https://www.360docs.net/doc/3516386106.html,st;i++) { if(S.data[i]==x) return i+1; //找到,转换为元素编号输出} return 0; } //插入元素 int listInsert(seqList &S,elementType x, int i) { int k; if(https://www.360docs.net/doc/3516386106.html,st>MAXLEN-1) return 0; //表满,返回0 else if(i<1 || i>https://www.360docs.net/doc/3516386106.html,st+2) return 1; //插入位置查处范围,返回1 else { for(k=https://www.360docs.net/doc/3516386106.html,st;k>=i-1;k--) S.data[k+1]=S.data[k]; S.data[i-1]=x; https://www.360docs.net/doc/3516386106.html,st++; return 2; } } //删除元素 int listDelete(seqList &S,int i) { int k; if(https://www.360docs.net/doc/3516386106.html,st==-1) return 0; //空表,返回0 else if(i<1 || i>https://www.360docs.net/doc/3516386106.html,st+1) return 1; //删除元素编号超出范围,返回1 else

数据结构_线性表练习题

一、判断题 1. 线性表的逻辑顺序与存储顺序总是一致的。(FALSE) 2. 顺序存储的线性表可以按序号随机存取。(TRUE) 3.顺序表的插入和删除一个数据元素,每次操作平均只有近一半的元素需要移动。TRUE) 4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。(TRUE) 5,在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。(FALSE ) 6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(TRUE) 7.线性表的链式存储结构优于顺序存储结构。(FALSE ) 8. 在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。(TRUE) 9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(TRUE) 10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(FALSE ) 二.选择题 11.线性表是()。 (A)一个有限序列,可以为空; (B)一个有限序列,不能为空; (C)一个无限序列,可以为空; (D)一个无序序列,不能为空。答:A 12.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的()个元素。 (A)n/2(B)(n+1)/2(C)(n–1)/2(D)n答:A 13.线性表采用链式存储时,其地址()。 (A)必须是连续的;(B)部分地址必须是连续的;(C)一定是不连续的;(D)连续与否均可以。答:D 14.用链表表示线性表的优点是()。 (A)便于随机存取 (B)花费的存储空间较顺序存储少 (C)便于插入和删除 (D)数据元素的物理顺序与逻辑顺序相同答:C 15.单链表中,增加一个头结点的目的是为了()。

实验一线性表与应用(I)

姓名学号

ElemType data; //待插入元素 SqList L; //定义SqList类型变量 InitList_Sq(L); //初始化顺序表 printf("※1. 请输入所需建立的线性表的长度:"); scanf_s("%d", &LIST_MAX); printf("※2. 请录入数据:"); for (i = 0; i

第二章线性表习题及答案

第二章线性表习题及答案 一、基础知识题 2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。 答:始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。 链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。 头结点是我们人为地在链表的开始结点之前附加的一个结点。有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。 2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜? 答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑: 1.基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。 2.基于时间的考虑。若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。 2.3 在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素? 答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。删除一个结点需平均移动(n-1)/2个结点。具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。i 越接近n则所需移动的结点数越少。 2.4 为什么在单循环链表中设置尾指针比设置头指针更好? 答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。 若用头指针来表示该链表,则查找终端结点的时间为O(n)。 2.5 在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 答:我们分别讨论三种链表的情况。 1. 单链表。当我们知道指针p指向某结点时,能够根据该指针找到其直接后继,但是由于不知道其头指针,所以无法访问到p指针指向的结点的直接前趋。因此无法删去该结点。 2. 双链表。由于这样的链表提供双向链接,因此根据已知结点可以查找到其直接前趋和直接后继,从而可以删除该结点。其时间复杂度为O(1)。 3. 单循环链表。根据已知结点位置,我们可以直接得到其后相邻的结点位置(直接后继),又因为是循环链表,所以我们可以通过查找,得到p结点的直接前趋。因此可以删去p所指结点。其时间复杂度应为O(n)。 2.6 下述算法的功能是什么? LinkList Demo(LinkList L){ // L 是无头结点单链表 ListNode *Q,*P; if(L&&L->next){ Q=L;L=L->next;P=L;

线性规划经典例题

线性规划常见题型及解法 由已知条件写出约束条件,并作出可行域,进而通过平移直线在可行域内求线性目标函数的最优解是最常见的题型,除此之外,还有以下六类常见题型。 一、求线性目标函数的取值范围 例1、 若x 、y 满足约束条件222x y x y ≤?? ≤??+≥? ,则z=x+2y 的取值范围是 ( ) A 、[2,6] B 、[2,5] C 、[3,6] D 、(3,5] 解:如图,作出可行域,作直线l :x+2y =0,将 l 向右上方平移,过点A (2,0)时,有最小值 2,过点B (2,2)时,有最大值6,故选A 二、求可行域的面积 例2、不等式组260302x y x y y +-≥?? +-≤??≤? 表示的平面区域的面积为 ( ) A 、4 B 、1 C 、5 D 、无穷大 解:如图,作出可行域,△ABC 的面积即为所求,由梯形OMBC 的面积减去梯形OMAC 的面积即可,选B 三、求可行域中整点个数 例3、满足|x|+|y|≤2的点(x ,y )中整点(横纵坐标都是整数)有( ) A 、9个 B 、10个 C 、13个 D 、14个 x y O 2 2 x=2 y =2 x + y =2 B A 2x + y – 6= 0 = 5 x +y – 3 = 0 O y x A B C M y =2

解:|x|+|y|≤2等价于2(0,0)2(0,0)2(0,0) 2 (0,0)x y x y x y x y x y x y x y x y +≤≥≥??-≤≥? ? -+≤≥??--≤? 作出可行域如右图,是正方形内部(包括边界),容易得到整 点个数为13个,选D 四、求线性目标函数中参数的取值范围 例4、已知x 、y 满足以下约束条件5503x y x y x +≥?? -+≤??≤? ,使z=x+ay(a>0) 取得最小值的最优解有无数个,则a 的值为 ( ) A 、-3 B 、3 C 、-1 D 、1 解:如图,作出可行域,作直线l :x+ay =0,要使目标函数z=x+ay(a>0)取得最小值的最优解 有无数个,则将l 向右上方平移后与直线x+y =5重合,故a=1,选D 五、求非线性目标函数的最值 例5、已知x 、y 满足以下约束条件220240330x y x y x y +-≥?? -+≥??--≤? ,则z=x 2+y 2的最大值和最小值分别是( ) A 、13,1 B 、13,2 C 、13,4 5 D 、 5 解:如图,作出可行域,x 2+y 2是点(x ,y )到原点的距离的平方,故最大值为点A (2,3)到原点的距离的平方,即|AO|2=13,最小值为原点到直线2x +y -2=0的距离的平方,即为 4 5 ,选C 六、求约束条件中参数的取值范围 例6、已知|2x -y +m|<3表示的平面区域包含点 (0,0)和(- 1,1),则m 的取值范围是 ( ) A 、(-3,6) B 、(0,6) C 、(0,3) D 、(-3,3)

相关文档
最新文档