链表、头指针、头结点

链表、头指针、头结点
链表、头指针、头结点

链表、头指针、头结点

图1为线性表(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)的逻辑状态。头指针指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)。

图1线性链表的逻辑状态

由上述描述可见,单链表可由头指针来唯一确定,在C语言中可用“结构指针”来描述。

[cpp]view plaincopy

1.//-----线性表的单链表存储结构-----

2.typedef struct LNode{

3. ElemType data;

4. struct LNode *next;

5.}LNode, *LinkList;

有时在单链表的第一个结点之前附设一个结点,称之为头结点。头结点的数据域可以不存储任何信息,也可以存储如线性表长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。如图2(a)所示,此时,单链表的头指针指向头结点。若线性表为空,则头结点的指针域为“空”,如图2(b)所示。

图2 带头结点的单链表 (a)非空表;(b)空表

循环链表是另一种形式的链式存储结构。它的特点是表中最后一个节点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他结点,如图3所示为单链的循环链表。

图3单链循环表 (a)非空表;(b)空表

循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next是

否为空,而是它们是否等于头指针,但有的时候,若在循环链表中设立尾指针而不设头指针(如图4(a)所示),可使某些操作简化。例如将两个线性表合并成一个表时,仅需将一个表的尾表和另一个表的头表相接。当线性表以图2.4(a)的循环链表作存储结构时,这个操作仅需改变两

个指针值即可,运算时间为O (1)。合并后的表如图4(b)所示。

图4 仅设尾指针的循环链表 (a)两个链表;(b)合并后的表

以上讨论的链式存储结构的节点中只有一个指示直接后继的指针域,由此,从某个结点出发只能顺指针往后寻查其他结点。若要寻查节点的直接前趋,则需从表头指针出发。换句话说,在单链表中,NextElem的执行时间为 O(1),而PriorElem的执行时间为O(n)。为克服单链表这种单向性的缺点,可利用双向链表。顾名思义,在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。在C语言中可描述如下:

[cpp]view plaincopy

1.//-----线性表的双向链表存储结构-----

2.typedef struct DuLNode{

3. ElemType data;

4. struct DuLNode *prior;

5. struct DuLNode *next;

6.}DuLNode, *DuLinkList;

和单链的循环表类似,双向链表也可以有循环表,如图5(c)所示,链表中存有两个环,图5(b)所示为只有一个表头结点的空表。在双向链表中,若d为指向表中某一个结点的指针(即d为DuLinkList型变量),则显然有

d->next->prior=d->prior->next=d

图5 双向链表示例 (a)结点结构;(b)空的双向循环链表;(c)非空的双向循环链表

计算机二级题目(一)

第一章 1.算法的有穷性是指()。答案:A A) 算法程序的运行时间是有限的B)算 法程序所处理的数据量是有限的C)算 法程序的长度是有限的D)算法 只能被有限的用户使用 2.对长度为n 的线性表排序,在最坏情况下,比较次数不是n(n-1)/2 的排序方法是()。答案:D A)快速排序 B)冒泡排序C) 直接插入排序D) 堆排序 3.下列关于栈的叙述正确的是()。答案:B A)栈按"先进先出"组织数据 B)栈按"先进后出"组织数据 C)只能在栈底插入数据D) 不能删除数据 4.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是()。答案:B A)12345ABCDE B)EDCBA54321 C)ABCDE12345 D)54321EDCBA 5.下列叙述中正确的是()。答案:D A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B) 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C) 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D) 循环队列中元素的个数是由队头指针和队尾指针共同决定 7.下列叙述中正确的是()。答案:A A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B) 顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺 序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存 储结构比顺序存储结构节省存储空间 8.在数据管理技术发展的三个阶段中,数据共享最好的是()。答案:C A)人工管理阶段 B)文件系统阶段C) 数据库系统阶段D) 三个阶段相同 9.下列叙述中正确的是()。答案:D A)栈是“先进先出”的线性表B) 队列是“先进后出”的线性表C)循 环队列是非线性结构 D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构

顺序表及链表的应用

设计一顺序表的应用代码 Head.h #define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 #define LISTINCREMENT 10//线性表存储空间的分配增量 #define STACK_INIT_SIZE 100//栈存储空间初始分配量 #define STACKINCREMENT 10//栈存储空间分配增量 #define MAXQSIZE 10//最大队列长度 typedef int ElemType; typedef char SElemType; typedef int QElemType; typedef struct{ int *elem;//存储空间基址 int length;//当前长度 int listsize;//当前分配的存储容量 }SqList; typedef struct{ SElemType *base;//在栈构造之前和销毁之后,base的值为null SElemType *top;//栈顶指针 int stacksize;//当前已分配的存储空间,以元素为单位 }SqStack; typedef struct { QElemType *base;//初始化的动态分配存储空间 int front;//头指针,若队列不空,指向队列头元素 int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置}SqQueue; void Check1(); void Check2(); void Check3(); void Check4(); int InitList_Sq(SqList *L); int CreateList(SqList *L); int DeleteElem_Sq(SqList *L); int PrintElem(SqList L); int DeleteElem_1(SqList *L); int DevideList_Sq(SqList L,SqList *La,SqList *Lb); int InitStack(SqStack *L); int Push(SqStack *S,SElemType e); int StackEmpty(SqStack S); int GetTop(SqStack S,SElemType *e); int Pop(SqStack *S,SElemType *e); int Correct(char exp[], int n); int InitQueue(SqQueue *Q); int CreateQueue(SqQueue *Q);

栈和队列

栈和队列 一、单项选择题(共59题) 1. 假定一个链式队列的队首和队尾指针分别用front和rear表示,每个结点的结构为: ,当出列时所进行的指针操作为() A. front = front->next; B. rear = rear->next; C. front->next = rear; rear = rear->next; D. front = front->next; front->next = rear; 答案:A 2. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行()。 A. HS->next = s; B. s->next = HS->next; HS->next = s; C. s->next = HS; HS = s; D. s->next = HS; HS = HS->next; 答案:C 3. 假定一个带头结点的循环链式队列的队首和队尾指针分别用front和rear表示,则判断队空的条件为()。 A. front == rear >next B. rear == NULL C. front == NULL D. front == rear 答案:D 4. 若让元素1, 2, 3, 4依次进栈,则出栈次序不可能出现()的情况。 A. 3, 2, 1, 4 B. 2, 1, 4, 3 C. 4, 3, 2, 1 D. 1, 4, 2, 3 答案:D 5. 假定一个顺序循环队列存储于数组a[N]中,其队首和队尾指针分别用f和r表示,则判断队满的条件为()。 A. (r - 1) % N == f B. (r + l) % N == f C. (f - 1) % N == r D. (f + l) % N == r 答案:B 6. 假定利用数组a[N]循环顺序存储一个队列,用f和r分别表示队首和队尾指针,并已知

MSoffice选择题

1.下列叙述中正确的是()。 A)所谓算法就是计算方法 B)程序可以作为算法的一种描述方法 C)算法设计只需考虑得到计算结果 D)算法设计可以忽略算法的运算时间 2.下列各序列中不是堆的是()。 A)(91,85,53,36,47,30,24,12) B)(91,85,53,47,36,30,24,12) C)(47,91,53,85,30,12,24,36) D)(91,85,53,47,30,12,24,36) 3.深度为5的完全二叉树的结点数不可能是()。 A)15 B)16 C)17 D)18

4.设二叉树如下: 则前序序列为()。 A)ABDEGCFH B)DBGEAFHC C)DGEBHFCA D)ABCDEFGH 5.下列叙述中正确的是()。 A)循环队列是顺序存储结构 B)循环队列是链式存储结构 C)循环队列是非线性结构 D)循环队列的插入运算不会发生溢出现象6.下列叙述中正确的是()。 A)所有数据结构必须有根结点

B)所有数据结构必须有终端结点(即叶子结点) C)只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构D)没有根结点或没有叶子结点的数据结构一定是非线性结构 7.下列关于算法的描述中错误的是()。 A)算法强调动态的执行过程,不同于静态的计算公式 B)算法必须能在有限个步骤之后终止 C)算法设计必须考虑算法的复杂度 D)算法的优劣取决于运行算法程序的环境 8.设二叉树如下: 则中序序列为()。 A)ABDEGCFH B)DBGEAFHC

C)DGEBHFCA D)ABCDEFGH 9.线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有()。 A)节省存储空间 B)插入与删除运算效率高 C)便于查找 D)排序时减少元素的比较次数 10.深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为()。 A)62 B)63 C)64 D)65 11.下列叙述中正确的是()。 A)所谓有序表是指在顺序存储空间内连续存放的元素序列 B)有序表只能顺序存储在连续的存储空间内 C)有序表可以用链接存储方式存储在不连续的存储空间内

指针测试题

C++测试(指针) 学号姓名成绩 一、选择题(每题1.5分,共24分) 1.语句int a=10,*point=&a;其值不为地址。 A. point B. &a C. &point D. *point 2.若p为指针变量,y为变量,则y = *p++;的含义是 A.y=*p;p++ B.y=(*p)++ C.y=p;p++ D.p++;y=*p 3.语句char str[]=?visual C++?;char *p=str;则p的值为 A. ?visual C++? B.str的首地址 C. \n D.?v? 4.设有说明语句char *s[]={?student?,?Teacher?,?Father?,?Month?}, *ps=s[2];执行语句:cout<<*s[1]<<’,’<next=&b; D.(*p).next=q; 9.下面正确的语句是 A. int a[3][4],(*p)[4]; p=a; B. int a[3][4],*p[4]; p=a; C. int a[3][4],*p; p=a; D. int a[3][4],**p;*p=a; 10.下面不正确的语句是 A.float *p;p=new float[3]; B. int *p;p=new int[3](1,2,3); C. float *p;p=new float(3); D. int (*p)[4];p=new int[3][4]; 11.设有函数定义:int f1(void){return 100,150;}调用函数f1()时, A.函数返回值100 B. 函数返回值150 C. 函数返回二个值100和150 D. 语句return 100,150;语法错. 12.设有语句:int fun(char *,int &);char str[100];int k;则对函数fun的正确的调用形式是 A.fun(str,&k) B.fun(str,k) C.fun(str[100],k) D.fun(str, &k) 13.数组作为函数的形参时,把数组名作为实参,传递给函数的是 A.该数组的首地址 B. 该数组的元素个数 C. 该数组中的各元素值 D. 该数组的大小 14.执行以下语句序列:则 enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat}c1,c2; //A

全国计算机等级考试无纸化真考题库试卷二级C--(4)资料

全国计算机等级考试无纸化真考题库试卷(4) 二级C++ (考试时间l20分钟,满分100分) 一、选择题(每小题1分,共40分) (1)下列数据结构中,属于非线性结构的是( )。 A)循环队列 B)带链队列 C)二叉树 D)带链栈 (2)下列数据结构中,能够按照“先进后出”原则存取数据的是( )。 A)循环队列 B)栈 C)队列 D)二叉树 (3)对于循环队列,下列叙述中正确的是( )。 A)队头指针是固定不变的 B)队头指针一定大于队尾指针 C)队头指针一定小于队尾指针 D)队头指针可以大于队尾指针,也可以小于队尾指针 (4)算法的空间复杂度是指( )。一 A)算法在执行过程中所需要的计算机存储空间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的临时工作单元数 (5)软件设计中划分模块的一个准则是( )。 A)低内聚低耦合 B)高内聚低耦合 C)低内聚高耦合 D)高内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是( )。 A)可封装 B)自顶向下 C)模块化 D)逐步求精 (7)软件详细设计产生的图如下: 该图是( )。

A)N—S图 B)PAD图 C)程序流程图 D)E—R图 (8)数据库管理系统是( )。 A)操作系统的一部分 B)在操作系统支持下的系统软件 C)一种编译系统 D)一种操作系统 (9)在E—R图中,用来表示实体联系的图形是( )。 A)椭圆形 B)矩形 C)菱形 D)三角形 (10)有三个关系R,S和T如下: 其中关系T由关系R和s通过某种操作得到,该操作为( )。 A)选择 B)投影 C)交 D)并 (11)下列符号中可以用做C++标识符的是( )。 A)_radius B)f00~bar C)else D)3room (12)下列各组类型声明符中,含义相同的一组是( )。 A)unsigned long int和long B)signed short int和short C)unsigned short和short D)short int和int (13)必须用一对大括号括起来的程序段是( )。 A)switCh语句中的Case标号语句 B)if语句的分支 C)循环语句的循环体 D)函数的函数体 (14)语句int*P=&k;定义了指针P,与这个语句等效的语句序列是( )。 A)int* p;P=&k; B)int * P;P=k; C)int * p;* P=&k; D)int * p;* P=k;

数据结构单链表及其应用

课程上机实验二 一、上机题目:线性表及其应用 二、上机目的 1、深入复习C 语言程序设计课程中所学的指针等相关知识; 2、进一步掌握在TurboC2.0环境下调试程序的基本方法; 3、掌握线性表的链式存储结构(单链表)的基本操作。 三、上机内容 1、建立单链表的存储结构; 2、建立一个带头结点的单链表,并输出其元素值; 3、完成带头结点的单链表插入、删除一个数据元素操作 四、基本思想和算法描述(包括主要存储结构和程序流程图 ) 线性表的链式存储结构是指用一组任意的、连续的或不连续的内存单元存储线性表中逻辑上连续的数据。 在链式存储结构中,为了反映数据元素i a 与其直接后继元素1+i a 或者直接前驱元素1-i a 之间的关系,每个数据元素除了存储自身的信息外,还要存储指向后继元素或者直接前驱元素位置的指针。这两部分信息组成了数据元素的存储映像,称为结点。其中表示数据元素内容的部分称为数据域,表示直接后继元素或直接前驱元素位置的部分称为指针域。用链式存储结构的线性表也称为链表。在链表中插入或者删除数据时,只需要修改指针即可,从而避免了顺序存储中数据元素的大量移动问题。 链表是一种动态存储结构,在需要插入一个结点时,按结点类型向系统申请一个结点的存储空间;当删除一个结点时,就将这个结点的存储空间释放,它比顺序表的静态存储方式更加灵活高效。 程序的主要过程流程图如下: 五、测试用例及测试结果 测试用例:XXXXXX 测试结果:

六、调试分析(遇到哪些问题,都是如何解决的) XXXXXXXXXXXXXX 七、心得体会(本次上机实验的收获) 八、源程序清单 #include "stdafx.h" #include "stdio.h" #include "stdlib.h" typedef struct node { int data; struct node *next; }NODE; NODE *createlink() //初始化单链表 { int len; printf("输入想要建立的链表的长度:\n"); scanf("%d",&len); NODE *h,*p,*s; p=h=(NODE*)malloc(sizeof(NODE)); h->next=NULL; printf("请输入链表各元素值:\n"); for(int i=1;i<=len;i++) { s=(NODE*)malloc(sizeof(NODE)); scanf("%d",&s->data); s->next=0; p->next=s;

数据结构第3章 栈与队列习题

第3章栈与队列 一、单项选择题 1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是。 A.A B.B C.C D.D 2.经过以下栈运算后,x的值是。 InitStack(s);Push(s,a);Push(s,b);Pop(s,x);GetTop(s,x); A.a B.b C.1 D.0 3.已知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是。 A.push,pop,push,pop,push,pop B.push,push,push,pop,pop,pop C.push,push,pop,pop,push,pop D.push,pop,push,push,pop,pop 4.设一个栈的输入序列为A、B、C、D,则借助一个栈所得到的序列是。 A.A,B,C,D B.D,C,B,A C.A,C,D,B D.D,A,B,C 5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是。 A.edcba B.decba C.dceab D.abcde 6.已知一个栈的进栈序列是1,2,3,……,n,其输出序列的第一个元素是i,则第j个出栈元素是。 A.i B.n-i C.j-i+1 D.不确定 7.已知一个栈的进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,Pn,若p1=n,则pi的值。 A.i B.n-i C.n-i+1 D.不确定 8.设n个元素进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,p n,若p1=3,则p2的值。 A.一定是2 B.一定是1

C.不可能是1 D.以上都不对 9.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=1,则p1的值。 A.可能是2 B.一定是1 C.不可能是2 D.不可能是3 10.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=3,则p1的值。 A.可能是2 B.一定是2 C.不可能是1 D.一定是1 11.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p n=1,则p i(1≤i≤n-1)的值。 A.n-i+1 B.n-i C.i D.有多种可能 12.判定一个顺序栈S为空的条件为。 A.S.top= =S.base B.S.top!= S.base C.S.top!= S.base+S.stacksize D.S.top= = S.base+S.stacksize 13.判定一个顺序栈S为栈满的条件是。 A.S.top-S.base= =S.stacksize B.S.top= = S.base C.S.top-S.base!=S.stacksize D.S.top!= S.base 14.链栈与顺序栈相比有一个明显的优点,即。 A.插入操作方便B.通常不会出现栈满的情况 C.不会出现栈空的情况D.删除操作更加方便 15.最不适合用作链栈的链表是。 A.只有表头指针没有表尾指针的循环双链表 B.只有表尾指针没有表头指针的循环双链表 C.只有表尾指针没有表头指针的循环单链表 D.只有表头指针没有表尾指针的循环单链表 16.如果以链表作为栈的存储结构,则退链栈操作时。 A.必须判别链栈是否满B.判别链栈元素的类型 C.必须判别链栈是否空D.对链栈不作任何判别

实验2 单链表的操作及其应用

仲恺农业工程学院实验报告纸 计算机科学与工程学院(院、系)计算机科学与技术专业计机092 班组数据结构课 实验二链表的操作及其应用 一、实验目的 了解单链表的基本概念、结构的定义及在单链表上的基本操作(插入、删除、查找以及线性表合并),通过在Turbo C实现以上操作更好的了解书本上的内容并体会线性表的两种存储结构的区别。 二、实验内容 ⑴单链表的插入算法 ⑵单链表的删除算法 ⑶循环链表的插入和删除算法(选做) 源程序: #include #include #include #include #define LEN sizeof(LNode) //定义LEN为一个节点的长度 enum BOOL{False,True}; //定义BOOL型 typedef struct node {char data; //数据域 struct node *next;//指向下一个节点的指针 }LNode,*LinkList; void CreatList(LinkList &,int); //生成一个单链表 BOOL ListInsert(LinkList &,int,char); //在单链表中插入一个元素 BOOL ListDelete(LinkList &,int,char &); //在单链表中删除一个元素 void ListPrint(LinkList); //显示单链表所有元素 void main() {LinkList L; BOOL temp; int num,loc,flag=1; char j,ch; //---------------------程序解说----------------------- printf("本程序实现链式结构的线性表的操作。\n"); printf("可以进行插入,删除等操作。\n");

选择题带答案

第1部分二级公共基础知识试题第1章数据结构与算法 1.下列叙述中正确的是()。答案:B A)所谓算法就是计算方法B)程序可以作为算法的一种描述方法 C)算法设计只需考虑得到计算结果D)算法设计可以忽略算法的运算时间 2.下列各序列中不是堆的是()。答案:C A)(91,85,53,36,47,30,24,12) B)(91,85,53,47,36,30,24,12) C)(47,91,53,85,30,12,24,36) D)(91,85,53,47,30,12,24,36) 3.深度为5的完全二叉树的结点数不可能是()。答案:A A)15 B)16 C)17 D)18 4.设二叉树如下: 则前序序列为()。答案:A A)ABDEGCFH B)DBGEAFHC C)DGEBHFCA D)ABCDEFGH 5.下列叙述中正确的是()。答案:A A)循环队列是顺序存储结构B)循环队列是链式存储结构 C)循环队列是非线性结构D)循环队列的插入运算不会发生溢出现象6.下列叙述中正确的是()。答案:D A)所有数据结构必须有根结点 B)所有数据结构必须有终端结点(即叶子结点) C)只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构 D)没有根结点或没有叶子结点的数据结构一定是非线性结构 7.下列关于算法的描述中错误的是()。答案:D A)算法强调动态的执行过程,不同于静态的计算公式 B)算法必须能在有限个步骤之后终止 C)算法设计必须考虑算法的复杂度 D)算法的优劣取决于运行算法程序的环境

8.设二叉树如下: 则中序序列为()。答案:B A)ABDEGCFH B)DBGEAFHC C)DGEBHFCA D)ABCDEFGH 9.线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有()。答案:B A)节省存储空间B)插入与删除运算效率高 C)便于查找D)排序时减少元素的比较次数 10.深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为()。答案:B A)62 B)63 C)64 D)65 11.下列叙述中正确的是()。答案:C A)所谓有序表是指在顺序存储空间内连续存放的元素序列 B)有序表只能顺序存储在连续的存储空间内 C)有序表可以用链接存储方式存储在不连续的存储空间内 D)任何存储方式的有序表均能采用二分法进行查找 12.设二叉树如下: 则后序序列为()。答案:C A)ABDEGCFH B)DBGEAFHC C)DGEBHFCA D)ABCDEFGH 13.下列叙述中正确的是()。答案:B A)结点中具有两个指针域的链表一定是二叉链表 B)结点中具有两个指针域的链表可以是线性结构,也可以是非线性结构 C)二叉树只能采用链式存储结构D)循环链表是非线性结构 14.设某二叉树中共有140个结点,其中有40个度为1的结点。则()。答案:D A)该二叉树中有51个叶子结点B)该二叉树中有50个叶子结点 C)该二叉树中有51个度为2的结点D)不可能有这样的二叉树 15.带链的栈与顺序存储的栈相比,其优点是()。答案:C A)入栈与退栈操作方便B)可以省略栈底指针 C)入栈操作时不会受栈存储空间的限制而发生溢出D)以上都不对 16.某二叉树的前序序列为ABCD,中序序列为DCBA,则后序序列为()。答案:B

链表实验报告

C语言程序设计实验报告 实验一:链表的基本操作一·实验目的 1.掌握链表的建立方法 2.掌握链表中节点的查找与删除 3.掌握输出链表节点的方法 4.掌握链表节点排序的一种方法 5.掌握C语言创建菜单的方法 6.掌握结构化程序设计的方法 二·实验环境 1.硬件环境:当前所有电脑硬件环境均支持 2.软件环境:Visual C++6.0 三.函数功能 1. CreateList // 声明创建链表函数 2.TraverseList // 声明遍历链表函数 3. InsertList // 声明链表插入函数 4.DeleteTheList // 声明删除整个链表函数 5. FindList // 声明链表查询函数 四.程序流程图 五.程序代码 #include #include typedef int Elemtype; typedef int Status; typedef struct node//定义存储节点 { int data;//数据域 struct node *next;//结构体指针 } *linklist,node;//结构体变量,结构体名称 linklist creat (int n)//创建单链表 { linklist head,r,p;//定义头指针r,p,指针 int x,i; head=(node *)malloc(sizeof(node));//生成头结点

r=head;//r指向头结点 printf("输入数字:\n"); for(i=n;i>0;i--)//for 循环用于生成第一个节点并读入数据{ scanf("%d",&x); p=(node *)malloc(sizeof(node)); p->data=x;//读入第一个节点的数据 r->next=p;//把第一个节点连在头结点的后面 r=p;//循环以便于生成第二个节点 } r->next=0;//生成链表后的断开符 return head;//返回头指针 } void output (linklist head)//输出链表 { linklist p; p=head->next; do { printf("%3d",p->data); p=p->next; } while(p); printf("\n") } Status insert ( linklist &l,int i, Elemtype e)//插入操作 { int j=0; linklist p=l,s; while(jnext; ++j; } if(!p || j>i-1) return -1; else { s=(node *)malloc(sizeof(node)); s->data=e; s->next=p->next; p->next=s; return 1; } } Status delect ( linklist &l,int i, Elemtype &e)//删除操作 { int j=0; linklist p=l,q; while(jnext) { p=p->next; ++j; } if(!p->next || j>i-1) return -1;

李春葆数据结构习题与解析(修订版)知识分享

李春葆编著:数据结构(C语言篇)――习题与解析(修订版) 清华大学出版社 一、绪论 选择题 1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。 1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是1,算法分析的两个主要方面是2。 1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.正确性和简单性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。 A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是。 A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。 A.正确 B.不正确 填空题 1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。 2.在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3.在树形结构中,树根结点没有结点,其余每个结点有且只有个前驱结点;叶子结点没有结点,其余每个结点的后续可以。

计算机二级选择题

1.算法的有穷性是指()。答案:A A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用 2.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。答案:D A)快速排序 B)冒泡排序 C)直接插入排序 D)堆排序 3.下列关于栈的叙述正确的是()。答案:B A)栈按"先进先出"组织数据 B)栈按"先进后出"组织数据 C)只能在栈底插入数据 D)不能删除数据 4.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。答案:B A)12345ABCDE B)EDCBA54321 C)ABCDE12345 D)54321EDCBA 5.下列叙述中正确的是()。答案:D A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构 B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况 C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D)循环队列中元素的个数是由队头指针和队尾指针共同决定 6.在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。答案:C A)O(n) B) C) D) 7.下列叙述中正确的是()。答案:A A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构 C)顺序存储结构能存储有序表,链式存储结构不能存储有序表 D)链式存储结构比顺序存储结构节省存储空间 8.在数据管理技术发展的三个阶段中,数据共享最好的是()。答案:C A)人工管理阶段 B)文件系统阶段 C)数据库系统阶段 D)三个阶段相同 9.下列叙述中正确的是()。答案:D A)栈是“先进先出”的线性表 B)队列是“先进后出”的线性表 C)循环队列是非线性结构 D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 10.支持子程序调用的数据结构是()。答案:A A)栈 B)树

指针习题-20

*Chap10_1 编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。 *Chap10_2 所谓藏头诗,就是将这首诗每一句的第一个字连起来,所组成的内容就是该诗的真正含义。编写一个程序,输入一首藏头诗(假设只有4句),输出其真实含义。 江雪 千山鸟飞绝, 万径人踪灭。 孤舟蓑笠翁, 独钓寒江雪。 “千万孤独” *Chap10_3 输入一个字符串和一个字符,如果该字符在字符串中,就从该字符首次出现的位置开始输出字符串中的字符。要求定义函数match(s, ch),在字符串s中查找字符ch,如果找到,返回第一次找到的该字符在字符串中的位置(地址);否则,返回空指针NULL。 **Chap10_4输入年份和天数,输出对应的年、月、日。要求定义和调用函数month_day ( year, yearday, *pmonth, *pday),其中year 是年,yearday是天数,*pmonth和*pday是计算得出的月和日。例如,输入2000和61,输出2000-3-1,即2000年的第61天是3月1日。

**Chap10_5 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。 **Chap10_6 请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。 **Chap10_7请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。 ***Chap10_8 输入10个学生的姓名,并按拼音字母由小到大的顺序输出。要求用指针数组实现。 ***Chap10_9 先输入一个正整数n,再输入任意n个整数,计算并输出这n个整数的和。要求使用动态内存分配方法为这n个整数分配空间。 ***Chap10_10 编写一个函数calc(f, a, b),用梯形公式求函数f(x)在[a, b]上的数值积分,其中a=0.0,b=1.0。

计算机二级MS选择题1

1.下列叙述中正确的是( )。答案:B A )所谓算法就是计算方法 B )程序可以作为算法的一种描述方法 C )算法设计只需考虑得到计算结果 D )算法设计可以忽略算法的运算时间 2.下列各序列中不是堆的是( )。 A )(91,85,53,36,47,30,24,12) B ) (91,85,53,47,36,30,24,12) C )(47,91,53,85,30,12,24,36) D )(91,85,53,47,30,12,24,36) 3.深度为5 的完全二叉树的结点数不可能是( )。 答案:A A )15 B )16 C )17 D ) 18 4.设二叉树如下: 则前序序列为( )。 A )ABDEGCFH B )DBGEAFH C C )DGEBHFCA D )ABCDEFGH 5.下列叙述中正确的是( )。答案:A A )循环队列是顺序存储结构 B )循环队列是链式存储结构 C )循环队列是非线性结构 D )循环队列的插入运算不会发生溢出现象 6.下列叙述中正确的是( )。 A )所有数据结构必须有根结点 B )所有数据结构必须有终端结点(即叶子结点) C )只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构 D )没有根结点或没有叶子结点的数据结构一定是非线性结构 7.下列关于算法的描述中错误的是( )。答案:D A )算法强调动态的执行过程,不同于静态的计算公式 B )算法必须能在有限个步骤之后终止 C )算法设计必须考虑算法的复杂度 D )算法的优劣取决于运行算法程序的环境 8.设二叉树如下: 则中序序列为( )。 A )ABDEGCFH B )DBGEAFH C C )DGEBHFCA D )ABCDEFGH 9.线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有( )。答案:B A )节省存储空间 B )插入与删除运算效率高 C )便于查找

实验三四 链表的实现和应用

江南大学物联网工程学院上机报告
课程名称 班 级 数据结构 上机名称 姓 名 链表的实现和应 用 上机日期 学 号 2016.3.11 上机报告要求 1.上机名称 2.上机要求 3.上机环境 4.程序清单(写明运行结果) 5.上机体会
1.上机名称
链表的实现和应用
2.上机要求
⑴定义线性表的链式存储表示; ⑵基于所设计的存储结构实现线性表的基本操作; ⑶编写一个主程序对所实现的线性表进行测试; ⑷线性表的应用:①设线性表 L1和 L2分别代表集合 A 和 B,试设计算法求 A 和 B 的并集 C,并用线 性表 L3代表集合 C;②设线性表 L1和 L2中的数据元素为整数,且均已按值非递减有序排列,试 设计算法对 L1和 L2进行合并,用线性表 L3保存合并结果,要求 L3中的数据元素也按值非递减 有序排列。 ⑸设计一个一元多项式计算器,要求能够:①输入并建立多项式;②输出多项式;③执行两个多项式 相加;④执行两个多项式相减;⑤(选做)执行两个多项式相乘。
3.上机环境
Visual C++ 6.0
4.程序清单(写明运行结果)
(1) #include #include typedef int datatype; typedef struct node { datatype data; struct node *next; }LinkList; LinkList *CREATLISTF(LinkList *L,int n) { intnum,i; LinkList *head,*s,*r; head=L; r=head; head->next=NULL;

第3章栈与队列习题参考答案

习题三参考答案 备注: 红色字体标明的是与书本内容有改动的内容。 一、选择题 1.在栈中存取数据的原则是( B )。 A.先进先出 B. 先进后出 C. 后进后出 D. 没有限制 2.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。 A.1234 B. 1324 C. 4321 D. 1423 3.在链栈中,进行出栈操作时(B )。 A.需要判断栈是否满 B. 需要判断栈是否为空 C. 需要判断栈元素的类型 D. 无需对栈作任何差别 4.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是( A )。 A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-1 5.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize。则顺序栈的判满的条件是( C )。 A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-1 6.在队列中存取数据元素的原则是( A )。 A.先进先出 B. 先进后出 C. 后进后出 D. 没有限制 7.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判空条件是(A )。 A.front==rear B. front!=rear C. front==rear+1 D. front==(rear+1)% maxSize 8.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判满条件是(D )。 A.front==rear B. front!=rear C. front==rear+1 D. front==(rear+1)% maxSize 9.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首 和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的长度是(C )。 A.rear-front B. rear-front+1 C. (rear-front+maxSize)%maxSize D. (rear-front+1)%maxSize 10.设长度为n的链队列采用单循环链表加以表示,若只设一个头指针指向队首元素,则入队操作的时间复杂度 为( B )。 A.O(1) B.O(n) C.O(log2n) D.O(n2) 二、填空题 1.栈是一种操作受限的特殊线性表,其特殊性体现在其插入和删除操作都限制在表尾进行。允许插入和删除 操作的一端称为栈顶,而另一端称为栈底。栈具有后进先出的特点。

C语言试题及答案

2009年9月全国计算机等级考试二级笔试试卷 C程序设计 (考试时间90分钟,满分100分) 一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分) (1)下列数据结构中,属于非线性结构的是 A)循环队列 B) 带链队列 C) 二叉树 D)带链栈 (2)下列数据结果中,能够按照“先进后出”原则存取数据的是 A) 循环队列 B) 栈 C)队列 D)二叉树 (3)对于循环队列,下列叙述中正确的是 A)队头指针是固定不变的 B)队头指针一定大于队尾指针 C)队头指针一定小于队尾指针 D)队头指针可以大于队尾指针,也可以小于队尾指针 (4)算法的空间复杂度是指 A)算法在执行过程中所需要的计算机存储空间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的临时工作单元数 (5)软件设计中划分模块的一个准则是 A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是 A) 可封装 D) 自顶向下 C) 模块化 D) 逐步求精 (7)软件详细设计产生的图如下:

该图是 A) N-S图 B) PAD图 C) 程序流程图 D) E-R图 (8)数据库管理系统是 A)操作系统的一部分 B) 在操作系统支持下的系统软件 C) 一种编译系统 D) 一种操作系统 (9)在E-R图中,用来表示实体联系的图形是 A) 椭圆图 B) 矩形 C) 菱形 D) 三角形 (10)有三个关系R,S和T如下: 其中关系T由关系R和S通过某种操作得到,该操作为 A) 选择 B) 投影 C) 交 D) 并 (11)以下叙述中正确的是 A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法

相关文档
最新文档