历年链表考题及答案

合集下载

C程序设计(链表)习题与答案

C程序设计(链表)习题与答案

一、单选题1、链表不具有的特点是()。

A.不必事先估计存储空间B.插入、删除不需要移动元素C.可随机访问任一元素D.所需空间与线性表长度成正比正确答案:C2、链接存储的存储结构所占存储空间()。

A.分两部分,一部分存放结点值,另一部分存放结点所占单元数B.只有一部分,存放结点值C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针D.只有一部分,存储表示结点间关系的指针正确答案:C3、链表是一种采用()存储结构存储的线性表。

A.网状B.星式C.链式D.顺序正确答案:C4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是()。

struct node {char data;struct node *next;} a,b,*p=&a,*q=&b;A.(*p).next=q;B.p.next=&b;C.a.next=q;D.p->next=&b;正确答案:B5、下面程序执行后的输出结果是()。

#include <stdio.h>#include <stdlib.h>struct NODE {int num; struct NODE *next;};int main(){ struct NODE *p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf("%d",p->num+q->next->num);return 0;}A.30B.40C.10D.20正确答案:B6、下面程序执行后的输出结果是()。

第08章指针和链表真题

第08章指针和链表真题

历年真题(指针)一、2003年1月10.以下定义语句中,错误的是(A ) int a{}={1,2}; (B ) char *a[3];(C ) char s[10]=”text ”; (D ) int n=5,a[n];14.下列语句执行后的结果是 。

y=5;p=&y;x=*p++;(A )x=5,y=5 (B )x=5,y=6(C )x=6,y=5 (D )x=6,y=615. 执行下面的语句后,表达式*(p[0]+1)+**(q+2)的值为 。

int a[]={5,4,3,2,1};*p[]={a+3,a+2,a+1,a};**q=p;(A )8 (B )7 (C )6 (D )516. 经过下面的语句int I,a[10],*p;定义后,下列语句中合法的是 。

(A )p=100; (B )p=a[5];(C )p=a+2; (D )p=&(i+2);29. 有如下程序main(){ char ch[2][5]={“6937”, “8254”},*p[2];int i,j,s=0;for(i=0;i<2;i++) p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]>‟0‟;j+=2)s=10*s+p[i][j]-…0‟;printf(“%d\n ”,s);}该程序的输出结果是 。

(A )69825 (B )63825 (C )6385 (D )69382530. 若建立如下图所示的单项链表结构date nextheadS在该链表结构中,指针p ,s 分别指向图中所示节点,则不能将s 所指的节点插入链表末尾仍构成单向链表的语句组是 。

(A ) p=p->next;s->next=p;p->next=s;(B)p=p->next;s->next=p->next;p->next=s;(C)s->next=NULL;p =p->next;p->next=s;(D)p=(*p).next;(*s).next=(*p).next; (*p).next=s;试卷二试题二:把下列程序补充完整实现两个字符串的比较,即自己写个strcmp函数,函数原型为:int strcmp(char *p1,char *p2)设p1指向字符串s1,p2指向字符串s2,要求:当s1=s2时,返回值为0。

C、C++程序设计:链表单元测试与答案

C、C++程序设计:链表单元测试与答案

一、单选题1、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入结点s,则执行()。

A.s->next=p->next;p->next=s;B.p->next=s->next; s->next=p;C.p->next=s;s->next=q;D.q->next=s;s->next=p;正确答案:D2、在一个表头指针为HL单链表中,若要向表头插入一个由指针p 指向的结点,则执行( )。

A.p一>next=HL;HL=p;B.HL=p; p一>next=HL;C.p一>next=Hl; p=HL;D.p一>next=HL一>next; HL=p;正确答案:A3、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:()。

A.p->next=s->next;p->next=s;B.p->next=s;s->next=p->next;C.p->next=s;p->next=s->next;D.s->next=p->next;p->next=s;正确答案:D4、在表尾指针为rs的链表的后面插入指针为p的结点的正确语句为()。

A.p->next=NULL; rs=p;B.rs->next=p; p->next=NULL;C.rs->next=p; rs->next=NULL;D.p->next=rs; rs->next=NULL;正确答案:B5、假设p为表尾指针rs的前驱指针,则删除表尾结点的正确语句为()。

A.p->next=NULL; delete p;B.p->next=NULL; delete rs;C.p=NULL; delete rs;D.rs=NULL; delete rs;正确答案:B二、判断题1、链表存储时,各结点的存储空间可以是不连续的。

第2章习题(带答案)

第2章习题(带答案)

第2章习题(带答案)1.链表不具有的特点是A.可随机访问任一个元素B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与线性表长度成正比2.在一个具有n个结点的单链表中查找值为某的某结点,若查找成功,则平均比较个结点。

A.nB.n/2C.(n-1)/2D.(n+1)/23.在单链表中P所指结点之后插入一个元素某的主要操作语句序列是=(node某)malloc(izeof(node));、->data=某;、->ne某t=p->ne某t、p->ne某t=。

4.在单链表中查找第i个元素所花的时间与i成正比。

(√)5.在带头结点的双循环链表中,任一结点的前驱指针均不为空。

(√)6.用链表表示线性表的优点是()。

A.便于随机存取C.便于插入与删除B.花费的存储空间比顺序表少D.数据元素的物理顺序与逻辑顺序相同7.在双向链表中删除P所指结点的主要操作语句序列是p->prior->ne某t=p->ne某t;、p->ne某t->prior=p->prior;、free(p);8.下述哪一条是顺序存储结构的优点?()A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示9.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。

则采用()存储方式最节省运算时间。

A.单链表B.双链表C.单循环链表D.带头结点的双循环链表10.对任何数据结构链式存储结构一定优于顺序存储结构。

(某)11.对于双向链表,在两个结点之间插入一个新结点需修改的指针共4个,单链表为____2___个。

12.以下数据结构中,()是非线性数据结构A.树B.字符串C.队列D.栈13.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表14.“线性表的逻辑顺序和物理顺序总是一致的。

java链表面试题

java链表面试题

java链表面试题链表是一种常见的数据结构,面试中经常会涉及到与链表相关的问题。

以下是一些常见的Java链表面试题,希望能够帮助你更好地准备面试。

1. 反转链表题目描述:给定一个单向链表的头节点,将该链表反转,返回反转后的链表头节点。

解题思路:使用三个指针pre、cur、next来实现链表的反转。

初始时pre为null,cur为头节点,next为cur的下一个节点。

通过迭代遍历链表,将cur的next指向pre,然后将pre、cur、next都向后移动一个位置。

直到遍历到链表的最后一个节点,最后将cur指向的节点作为新的链表头,并返回该节点。

示例代码:```javapublic Node reverseList(Node head) {Node pre = null;Node cur = head;while (cur != null) {Node next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}```2. 链表中环的检测题目描述:给定一个单向链表的头节点,判断该链表中是否存在环。

解题思路:使用快慢指针的方法来判断链表中是否存在环。

定义两个指针fast和slow,开始时都指向链表的头节点。

fast指针每次移动两个节点,slow指针每次移动一个节点。

如果链表中存在环,则fast指针最终会追赶上slow指针;如果链表中不存在环,则fast指针会先到达链表尾部,即fast指针为null。

示例代码:```javapublic boolean hasCycle(Node head) {Node fast = head;Node slow = head;while (fast != null && fast.next != null) {fast = fast.next.next;slow = slow.next;if (fast == slow) {return true;}}return false;}```3. 合并两个有序链表题目描述:给定两个有序链表的头节点,将两个链表合并为一个新的有序链表,并返回新链表的头节点。

python链表试题

python链表试题

python链表试题含解答共5道1. 试题:反转链表编写一个函数,反转一个单链表。

```pythonclass ListNode:def __init__(self, value=0, next=None):self.value = valueself.next = nextdef reverse_linked_list(head):prev = Nonecurrent = headwhile current is not None:next_node = current.nextcurrent.next = prevprev = currentcurrent = next_nodereturn prev```2. 试题:检测环编写一个函数,检测一个链表是否有环。

```pythondef has_cycle(head):slow = headfast = headwhile fast is not None and fast.next is not None:slow = slow.nextfast = fast.next.nextif slow == fast:return Truereturn False```3. 试题:合并两个有序链表编写一个函数,合并两个有序链表为一个新的有序链表。

```pythondef merge_two_lists(l1, l2):dummy = ListNode()current = dummywhile l1 is not None and l2 is not None:if l1.value < l2.value:current.next = l1l1 = l1.nextelse:current.next = l2l2 = l2.nextcurrent = current.nextif l1 is not None:current.next = l1else:current.next = l2return dummy.next```4. 试题:移除链表元素编写一个函数,移除链表中所有值为给定值的节点。

链表练习题及答案

链表练习题及答案

1、已知L是带表头的单链表,其P结点既不是首元结点,也不是尾元结点,a.删除p结点的直接后继的语句是11,3,14b.删除p结点的直接前驱的语句是10,12,8,11,3,14c.删除p结点的语句序列是10,7,3,14d.删除首元结点的语句序列是12,10,13,14e.删除尾元结点的语句序列是9,11,3,14(1)p=p->next;(2) p->next=p;(3)p->next=p->next->next;(4)p=p->next->next;(5)while(p)p=p->next;(6)whlie(Q->next){p=Q;Q=Q->next;}(7)while(p->next!=Q)p=p->next;(8)while(p->next->next!=Q)p=p->next;(9)while(p->next->next)p=p->next;(10)Q=p;(11)Q=p->next;(12)p=L;(13)L=L->next;(14)free(Q);2、已知L是带表头的单链表,其P结点既不是首元结点,也不是尾元结点,a.在p结点后插入s结点的语句序列是4,1b.在p结点前插入s结点的语句序列是7,11,8,4,1c.在表首插入s结点的语句序列是5,12d.在表尾插入s结点的语句序列是7,9,4,1或11,9,1,61.p-> next =s;2.p-> next=p-> next-> next;3.p->next=s->next;4.s->next=p-> next;5.s-> next=L;6.s->next=NULL;7.q=p ;8.while(p->next!=q) p=p->next;9.while(p->next!=NULL) p=p->next;10.p =q;11.p=L;12.L=s;13.L=P;3、已知P结点是某双向链表的中间结点,从下列提供的答案中选择合适的语句序列a.在P结点后插入S结点的语句序列是12,7,3,6b.在P结点前插入S结点的语句序列是13,8,5,4c.删除p结点的直接后继结点的语句序列是15,1,11,18d.删除p结点的直接前驱结点的语句序列是16,2,10,18e.删除p结点的语句序列是9,14,171.P->next=P->next->next;2.P->priou=P->priou->priou;3.P->next=S;4.P->priou=S;5.S->next=P;6.S->priou=P;7.S->next=P->next;8.S->priou=P->priou;9.P->priou->next=P->next;10.P->priou->next=P;11.P->next->priou=P;12.P->next->priou=S;13.P->priou->next=S;14.P->next->priou=P->priou;15.Q=p->next;16.Q=P->priou;17.free(P);18.free(Q);。

c++数据结构链表的选择题

c++数据结构链表的选择题

c++数据结构链表的选择题(最新版)目录1.链表的概述2.链表的优缺点3.链表的基本操作4.链表的选择题解答正文一、链表的概述链表是一种常见的数据结构,主要用于存储一系列有序的数据元素。

链表由若干个节点组成,每个节点包含两个部分:数据部分和指针部分。

数据部分用于存储实际数据,指针部分用于存储下一个节点的地址。

链表的第一个节点称为头节点,最后一个节点称为尾节点。

链表的头节点和尾节点通常会用哨兵节点(dummy node)表示,以方便编程操作。

二、链表的优缺点链表的优点主要有以下几点:1.灵活性高:链表可以根据需要动态创建和删除节点,因此适合存储动态数据。

2.插入和删除操作简便:在链表中插入和删除节点不需要移动后续节点,因此时间复杂度较低。

链表的缺点主要有以下几点:1.空间开销大:链表需要额外的空间来存储节点之间的指针。

2.访问节点较慢:链表需要遍历整个链表才能访问指定位置的节点,因此时间复杂度较高。

三、链表的基本操作链表的基本操作包括创建节点、插入节点、删除节点、遍历链表等。

下面分别介绍这些操作:1.创建节点:使用 malloc 或其他分配内存的方式分配一个新节点,并初始化节点的数据部分和指针部分。

2.插入节点:将新节点的指针部分指向原链表的尾节点,然后将新节点的数据部分与原链表的尾节点数据部分连接。

3.删除节点:遍历链表,找到待删除节点的前一个节点,将待删除节点的指针部分从原链表中删除,然后将待删除节点的数据部分和指针部分都设置为 NULL。

4.遍历链表:使用指针或迭代器遍历链表,访问链表中的每个节点。

四、链表的选择题解答以下是一些关于链表的选择题及其答案:1.链表中第一个节点称为?答:头节点。

2.链表中最后一个节点称为?答:尾节点。

3.链表中哨兵节点的作用是什么?答:用于区分链表的头部和尾部,方便编程操作。

4.在链表中插入一个新节点,需要修改的指针有哪些?答:需要修改新节点的指针部分,使其指向原链表的尾节点;同时需要修改原链表尾节点的指针部分,使其指向新节点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
历年链表考题及答案
[2005秋II.14]设已建立了两条单向链表,这两链表中的数据已按从小到大的次序排好,指针h1和h2分别指向这两条链表的首结点。链表上结点的数据结构如下:
struct node{
int data;
node *next;
};
以下函数node *Merge(node *h1, node *h2)的功能是将h1和h2指向的两条链表上的结点合并为一条链表,使得合并后的新链表上的数据仍然按升序排列,并返回新链表的首结点指针。
{p1 = p2 ;
p2=p2->next;
}
if ((30))//(30)p2->num < p->num或p->num>p2->num
{p2->next = p;
p->next =0;
}
else
{p->next = p2;
p1->next = p;
}
}
}
return (h);
}
[2004春II.11]输入一行字符串,用单向链表统计该字符串中每个字符出现的次数。方法是:对该字符串中的每个字符,依次查找链表上的结点。若链表结点上有该字符,则将该结点的count值加1;否则产生一个新结点,存放该字符,置count为1,并将该结点插入链首。最后,输出链表上的每个结点的字符及出现次数。链表的结构如下图所示。
if(head==0) //空表,插入第1个结点
{head=new Node;
strcpy(head->name, name);
head->count=1;
head->next=0;
}
else//不是空表,进行结点数值查找
{while(p1)
{if((27))//找到了// strcmp(p1->name, name)==0
print(h); dele(h);
}
[2003秋II.12]用链表实现对候选人的得票进行统计。函数Statistic的输入参数:head指向链首,name存放候选人的姓名。该函数的功能为:若在链表的结点上找到name,则将姓名为name的结点上得得票数加1;否则新建一个结点,初始化其姓名和的票数,并将新结点插入链尾。最后返回链表的首指针。链表的结构如下图所示。
[程序](4分)
Node *sort(Node *head)
{Node *p=head, *p1,*p2;
if(p==NULL) return head;
while(p->next!=NULL)
{ p1=p;
p2=p->next;
while(p2!=NULL)
{if()// p2->data < p1->d>next);
}
void DeleteChain(node *head)//依次删除链表上的每一个结点
{ node *p=head;
if(p)
{ head=____________ ;// head->next
delete p;
if(head) DeleteChain(head);
#include <iostream.h>
struct Node{
int x; //围成一圈时,人的序号
Node *next;
};
Node *DelNode(Node *head, int m) //依次输出环形链表中凡报到m者的序号
{ Node *p;
int count;
if(head==NULL) return _____________ ;// head
(30);// (30) head=p
}
return head;
}
void main(void)
{ char s[300], *p=s;
node *h=0;
char c;
cout<<"请输入一行字符串:";
cin.getline(s,300);
while(c=*p++) h=search(h, c);
}
[2005春II.11]设已建立一条单向链表,指针head指向该链表的首结点。结点的数据结构如下:
struct Node{
int data;
Node *next;
};
以下函数sort(Node *head)的功能是:将head所指向链表上各结点的数据按data值从小到大的顺序排序。
算法提示:初始时,使p指向链表的首结点,从p之后的所有结点中找出data值最小的结点,让p1指向该结点。将p指向的结点的data值与p1指向的结点的data值进行交换。让p指向下一个结点,依此类推,直至p指向链表的最后一个结点为止。
{ if(head)
{ cout<<head->data<<endl;
if(head->next) ShowChain(_____________);//head->next
}
}
void AddNode(node *p, node *&head) //将p所指向的结点插入链尾
{ if(head==NULL) head=___________ ;// p
cout<<"输入得票候选人的姓名:";
cin>>name;
while( strcmp(name,"0")!=0 )
{head = Statistic(head,name);
cout<<"输入得票候选人的姓名:";
cin>>name;
}
cout<<"统计得票结果:\n姓名得票数\n";
List(head);
head=head->next;
}
}
void dele(node *head)
{ node *p;
while(head!=NULL)
{ p=head;
head=(27);//(27) head->next
delete p;
}
}
node *search(node *head, char ch)
{ node *p;
Node *sort(Node *head)
{if (head== 0 ) return head;
Node *h,*p;
h=0;
while(head)
{p=head;
(27);//(27)head = head->next或head =p->next
Node *p1,*p2;
if (h == 0 )
Free(head);
}
[2003春II.14]以下程序使用递归函数实现单向链表操作,完成链表的创建、显示、释放链表的结点。
#include <iostream.h>
struct node
{ float data;
node *next;
};
void ShowChain(node *head) //依次输出每一个结点上的数据
[函数](4分)
node * Merge(node *h1, node *h2)
{node *newHead, *p, *p1;
//使newHead和q指向首结点数据较小链表的首结点,p指向另一链表首结点
if((27)){newHead=h1;p=h2;}// h1->data<h2->data
else{newHead=h2;p=h1;}
node *q=newHead;
//合并两条链表
while( q->next)
{if( q->next->data < p->data )
(28);// q=q->next
else
{(29);// p1=q->next
q->next=p;
q=p;
p=p1;
}
}
q->next=p;
(30);// return newNead
#include <iostream.h>
#include <string.h>
struct Node
{char name[12]; //候选人姓名
int count; //计数候选人的得票
Node * next;
};
Node *Statistic(Node *head, char *name)
{Node *p1=head,*p2;
p=head;
while(p)
{ if(p->c==ch)
{ p->count++; break; }
(28);//(28) p=p->next
}
if(p==0)
{ p=new node;
p->c=ch;
p->count=1;
if(head)(29);//(29) p->next=head
else p->next=0;
p1->next=0;
(30);// p2->next=p1
}
}
return head;
}
void List(Node *head) //输出结果
{while(head)
{cout<< head->name <<" :\t"<< head->count <<endl;
head=head->next;
相关文档
最新文档