线性表的顺序

一:顺序表与线性表有什么不同?

线性表是逻辑概念,只要所有的数据在逻辑上是一维的都可以认为是线性表。线性表包括顺序表(栈,队列等),链表(栈,队列等)。跟线性表相对的概念应该是树或者堆。

顺序表是空间概念,指的是所有的数据在存储空间上顺序排列,而跟具体的操作方式无关。与顺序表相对的概念只有链表。

二:C语言线性表顺序存储

建链表的函数用引用就好了

#include "stdafx.h"#include#include//-------------------#define MAXSIZE 100 //The largest number of peopletypedef int ElemType;typedef struct{ElemType data[MAXSIZE];ElemType passward[MAXSIZE];int length;}seqList;seqList *L;void CreaList(seqList *&L, int[MAXSIZE], int n);/////引用void PrintList(seqList *L, int n);//不一致int main(void){int n = 0, m = 0;int a[MAXSIZE];do{if (n > MAXSIZE){printf("The number of people too much,please input again!\n");}printf("Please enter the number of people(up to %d):", MAXSIZE);scanf_s("%d", &n);} while (n > MAXSIZE);printf("Please enter the initail password:");scanf_s("%d", &m);CreaList(L, a, n);printf("--------print the linear table--------\n\n");PrintList(L, n);printf("初始化成功...\n\n");system("pause");}void CreaList(seqList *&L, int a[MAXSIZE], int n)/////引用{int iPassword;L = (seqList *)malloc(sizeof(seqList));for (int i = 1; i <= n; i++){L->data[i] = a[i];printf("Please enter the %d personal password:", i);scanf_s("%d", &iPassword);L->passward[i] = iPassword;}L->length = n;}void PrintList(seqList *L, int n){for (int i = 1; i <= n; i++){printf("--------ID---------PASSWORD--------\n");printf("%6d %5d\n", L-&......余下全文>>

三:线性表和顺序表的区别

线性表是链式存储结构,用链表实现,使用空间多,且合理。而顺序表基本上是用数组实现的,使用空间有限,会造成浪费。

四:如何建立一个顺序存储的线性表,实现线性表的插入、删除操作?

顺序存储结构线性表基本操作 C语言实现

#include //以下为函数运行结果状态代码#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间分配增量typedef int Status; //函数类型,其值为为函数结果状态代码typedef int ElemType; //假设数据元素为整型typedef struct{ ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量}SqList;//实现线性表的顺序存储结构的类型定义//函数声明开始Status InitList_Sq(SqList &L);void DestroyList_Sq(SqList &L);void ClearList_Sq(SqList &L);void ListEmpty_Sq(SqList L);Status GetElem_Sq(SqList L,i,&e);int LocateElem_Sq(SqList L,e,compare());Status PriorElem_Sq(SqList L,cur_e,&pre_e);Status NextElem_Sq(SqList L,cur_e,&next_e);Status ListInsert_Sq(SqList &L,i,e);Status ListDelete_Sq(SqList &L,i,&e);ListTravel_Sq(SqList L,visit());//函数声明结束int main(void){ return 0;}//函数定义开始/////////////////////////////////////////函数名:InitList_Sq()//参数:SqList *L//初始条件:无//功能:构造一个空线性表//返回值:存储分配失败:OVERFLOW// 存储分配成功:OK///////////////////////////////////////Status InitList_Sq(SqLis......余下全文>>

五:线性表的顺序结构和链条结构各有什么优缺点 10分

线性表顺序结构

在此只是想重修一下数据结构,一是因为自已在校时没能学好,二是因为这对自已的提高可能会有一些帮助,我看的是在学校时发的一本C语言版本的《数据结构》,清华大学出版社出版。所有定义多出于此。所有算法改成C++。学了一年多的VC,还从来没有自己动手定过一个像样的类,在这里只是想练习一下,见笑了。

线性表的定义:

简而言之,一个线性表是n个数据元素的有限序列,在数据的非空有限集中,它具有以下特征:(1)存在一个唯一的被称做“第一个”的数据元素;(2)存在唯一的一个被称做“最后一个”的数据元素。(3)除第一个之外,集合中的每个数据元素均只有一个前驱。(4)除最后一个之外,集合中每个数据元素均只有一个后继。也就是说线性表体现的是数据元素之间的唯一性、连续性。如26个英文字母表{A,B,C,D...,X,Y,Z}。

抽象数据类型线性表的定义如下:

ADT List{

数据对象:D={ai|ai∈ElemSet,i=1,2,3.,n,n≥0}

数据关系:R1={

InitList()

操作结果:构结一个空的线性表。

DestroyList()

初始条件:线性表已存在(已初始化)

操作结果:销毁线性表

ClearList()

初始条件:线性表已存在(已初始化)

操作结果:将线性表重置为空表

ListEmpty()

初始条件:线性表已存在(已初始化)

操作结果:若线性表为空表则返回TRUE,否则返回FALSE

ListLength()

初始条件:线性表已存在(已初始化)

操作结果:返回线性表中元素个数

GetElem(i,&e)

初始条件:线性表已存在(已初始化)

操作结果:用e返回第i个数据元素的值。

LocateElem(e,compare())

初始条件:线性表已存在(已初始化), compare是数据判定函数

操作结果:返回系i个与e满足关系compare()元素

PriorElem(cur_e,&pre_e)

初始条件:线性表已存在(已初始化)

操作结果:若cur_e是线性表中的数据元素,且不是第一个,用pre_e来返回cur_e的前驱;否则操作失败。

NextElem(cur_e,&next_e)

初始条件:线性表已存在(已初始化)

操作结果:若cur_e是线性表中的数据元素,且不是最后一个元素,则用next_e返回它的的后继,否则操

作失败,next_e无定义。

ListInsert(i,e)

初始条件:线性表已存在,1<=i<=ListLength+1

操作结果:在第i个位置之前插入新的元素e,线性表长度加1

ListDelete(i,&e)

初始条件:线性表已存在且非空,1<=i<=ListLength

操作结果:删除线性表的第i个数据元素,并用e返回其值,线性表长度减一

ListTraverse(visit())

初始条件:线性表已存在(已初始化)

操作结果:依次对线性表......余下全文>>

六:线性表的顺序存储结构是随机存取的?

线性表的顺序存储结构可以通过线性表的首址加偏移的方法计算出礌第i个数据的位置a+i*sizeof(单个结构)而线性表的链式存储结构要访问第i个数据,就必须先访问前面的i-1个数据

七:如何用c语言编合并两个顺序线性表的程序?

void CombL(SqList *pa, SqList *pb)/*合并函数*/

{

if(!pa||!pb)

return ;

int length_La = pa->length;/*记录线性表La的初始长度*/

pa->length = pa->length + pb->length;/*合并后La的长度*/

ElemType *p, *pt = (ElemType *)realloc(pa->a,sizeof( 2 * MAXSIZE ) );/*从新建一个数组*/

if( !pt)

return ;

p = pt; /*将指针指向新数组首地址*/

int i, j;

for ( i = p +length_La-1 , j = 0 ; i<(p+ pa->length)&&(j < pb->length) ; i ++ , j ++)

{

(pt + i)* = pb->a[ j ];

}

pa->a = pt; /*交换数组*/

}

我没有调试过,你自己调试一下吧!大概思路是这样的!

八:线性表的顺序存储结构和线性表的链式存储结构分别是

B,

顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取,而链式存储结构的存储地址不一定连续,只能通过第个结点的指针顺序存取;

九:线性表的存储结构在什么情况下采用顺序存储结构

不需要对数据进行频繁的插入和删除等操作,以及需要对其进行随机访问时。

十:数据结构中线性表的顺序存储结构优点是什么,单选题,但是我感觉A,C,D都是啊。。。

答案选C,顺序表最主要的特点是可以进行随即访问特性。A选项,对于静态分配的顺序表,如果我给你100个存储空间,但是你指存取了几个单位还能说是存储空间充分利用吗,所以顺序表只是存储密度高,并不一定充分利用所以A错。B选项,顺序表插入删除需要移动大量元素B错。D选项,顺序表的特点是在O(1)的时间内找到“指定”的元素,而不是“查找”元素。对于按值查找,当顺序表在无序的情况下与链表的时间复杂度相同。所以D错

扫一扫手机访问

发表评论