数据结构顺序表的遍历操作要怎么写,急急急急!谢谢~
楼主你好
修改代码如下:
#include
#include
#define MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize];
int length;
} SqList;
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList *L)
{
free(L);
}
int ListEmpty(SqList *L)
{
return(L->length==0);
}
int ListLength(SqList *L)
{
return(L->length);
}
void DispList(SqList *L)
{
int i;
if (ListEmpty(L)) return;
for (i=0;ilength;i++)
printf("%c",L->elem[i]);
printf("
");
}
int GetElem(SqList *L,int i,ElemType &e)
{
if (iL->length)
return 0;
e=L->elem[i-1];
return 1;
}
int LocateElem(SqList *L, ElemType e)
{
int i=0;
while (ilength && L->elem[i]!=e) i++;
if (i>=L->length)
return 0;
else
return i+1;
}
int ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if (iL->length+1)
return 0;
i--;/*将顺序表位序转化为elem下标*/
for (j=L->length;j>i;j--)/*将elem[i]及后面元素后移一个位置*/
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++;/*顺序表长度增1*/
return 1;
}
int ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if (iL->length)
return 0;
i--;/*将顺序表位序转化为elem下标*/
e=L->elem[i];
for (j=i;jlength-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return 1;
}
void main()
{
int i;
SqList *L;
ElemType e;
printf("(1)初始化顺序表L
");
InitList(L);
printf("(2)依次采用尾插法插入a,b,c,d,e元素
");
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
printf("(3)输出顺序表L:");
DispList(L);
//实现由用户输入插入的位置,删除的位置
printf("(4)输入插入的位置i和插入数据e:");
scanf("%d %c",&i,&e);
getchar();
ListInsert(L,i,e);
DispList(L);
printf("(5)输入删除位置i:");
scanf("%d",&i);
ListDelete(L,i,e);
DispList(L);
}
希望能帮助你哈
广度优先用队列,深度优先用栈。简单说明如下:
广度优先:当一个节点被加入队列时,要标记为已遍历,遍历过程中,对于队列第一个元素,遍历其所有能够能一步达到的节点,如果是标记未遍历的,将其加入队列,从第一个元素出发所有能一步直接达到的节点遍历结束后将这个元素出列。
深度优先:当遍历到某个节点A时,如果是标记未遍历,将其入栈,遍历它能够一步直接达到的节点,如果是标记未遍历,将其入栈且标记为已遍历,然后对其进行类似A的操作,否则找能够一步直接达到的节点进行类似操作。直到所有能够一步直接达到的节点都已遍历,将A出栈。
这里使用“能够能一步达到的节点”而非“与其相邻的节点”是考虑到有向图因素。
具体可以找个图,然后使用广度和深度算法搜索一遍,每步自己手工修改队列和栈就明白怎么回事了。
遍历就是输出所有数据的意思,我现在要赶作业!没时间帮你写!只能给你个参考代码!
#include <iostream>
using namespace std;
#define LIST_INT_SIZE 100
#define LISTINCREMENT 10
#define ok 1
#define OVERFLOW 0
typedef char ElemType;
typedef int Status;
typedef struct
{
ElemType *elem;
int length;
int listsize;
} SqList;
Status InitList_Sq(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INT_SIZE;
return ok;
}
Status InitList_input(SqList &L)
{
int i=0;
ElemType c,*newbase;
cout<<"请输入顺序表元素,以Y表示停止输入!"<<endl;
while((cin>>c)&&(c!='Y'))
{
if(i>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L.elem=newbase;
cout<<"已经分配了内存!"<<endl;
L.listsize+=LISTINCREMENT;
}
L.elem[i++]=c;
}
L.length=i;
return ok;
}
Status Inlist_output(SqList &L)//这个就是遍历,输出的意思
{
for(int i=0;i<L.length;i++)
cout<<L.elem[i]<<" ";
cout<<endl;
return ok;
}
Status LIstInstert_Sq(SqList &L,int i,ElemType e)
{
ElemType *newbase ,*q,*p;
if(i<1||i>L.length+1)
{
cout<<"插入的位置非法!"<<endl;
exit(OVERFLOW);
}
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
cout<<"已经分配了内存!"<<endl;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;
L.length++;
return ok;
}
Status LIst_Delete_Sq(SqList &L,int i,ElemType &e)
{
if(i<1||i>L.length)
{
cout<<"删除位置非法!"<<endl;
exit(OVERFLOW);
}
ElemType *p,*q;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p) *(p-1)=*p;
L.length--;
return e;
}
Status main()
{
SqList L;
ElemType e,temp;
int i;
InitList_Sq(L);
InitList_input(L);
cout<<"输入的顺序表的元素是:"<<endl;
Inlist_output(L);
cout<<"请输入要插入的位置和元素!"<<endl;
cin>>i>>e;
LIstInstert_Sq(L,i,e);
cout<<"插入后的顺序表元素为:"<<endl;
Inlist_output(L);
cout<<"请输入要删除的元素的位置"<<endl;
cin>>i;
cout<<"元素"<<(char)LIst_Delete_Sq(L,i,temp)<<"已经删除"<<endl;
cout<<"删除元素后的顺序表的元素是!"<<endl;
Inlist_output(L);
return 0;
}//这是我写的。
//顺序表示很好理解的,相当于一个指针数组!
临时帮你编了一个程序
#include<iostream>
using namespace std;
void visit(int x)
{
cout<<x<<endl;
}
void trave(int a[],int n,void (*visit)(int))
{
for(int i=0;i<n;i++)
visit(a[i]);
}
void main()
{
int a[]={1,2,3,4,5};
trave(a,5,visit);
}
所以实现上面的代码很简单
typedef Elem int;
void visit(iElem x)
{
cout<<x<<endl;
}
SqList Traverse(SqList L,void (*visit)(Elem))
{
for(int i=0;i<L.length;++i)
visit(L.base[i]);
return L;
}
遍历就是打印出这个表里的所有数据元素
Status listTravel(SqList L)
{
int i;
for(i=0;i<L.lenth;i++)
printf("%d",*(L.base+i));
}
据轼的结构据轼的结构是什么
据轼的结构是:据(左右结构)轼(左右结构)。据轼的结构是:据(左右结构)轼(左右结构)。拼音是:jùshì。注音是:ㄐㄨ_ㄕ_。据轼的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】亦作'据式'。靠着轼。轼_车前横木。二、引证解释⒈亦作“据式”。靠着...
数据结构判断题;在线索二叉树中,依据线索不能一次遍历树中的全部结点...
这个应该是先序线索或者后序线索,中序是可以在线索化的二叉树上双向遍历的 大部分先序线索化二叉树找先序前驱困难,所有的先序线索二叉树可以很方便地找到先序后继,这样往后遍历可以,往前不行 大部分后序线索化二叉树找后序后继困难,所有的后序线索二叉树可以很方便地找到后序前驱,这样往前可以,...
据窃的结构据窃的结构是什么
据窃的结构是:据(左右结构)窃(上下结构)。据窃的结构是:据(左右结构)窃(上下结构)。拼音是:jùqiè。注音是:ㄐㄨ_ㄑ一ㄝ_。据窃的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】窃据_非法占据。二、引证解释⒈窃据,非法占据。引唐温大雅《大唐创业...
票据的结构票据的结构是什么
票据的结构是:票(上下结构)据(左右结构)。票据的结构是:票(上下结构)据(左右结构)。词性是:名词。注音是:ㄆ一ㄠ_ㄐㄨ_。拼音是:piàojù。票据的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】票据piàojù。(1)依据法律按照规定形式制成的并显示有...
据有的结构据有的结构是什么
据有的结构是:据(左右结构)有(半包围结构)。据有的结构是:据(左右结构)有(半包围结构)。拼音是:jùyǒu。注音是:ㄐㄨ_一ㄡˇ。据有的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】据有jùyǒu。(1)占据;占有。二、引证解释⒈占据,占有。引汉...
单据的结构单据的结构是什么
单据的结构是:单(上下结构)据(左右结构)。单据的结构是:单(上下结构)据(左右结构)。词性是:名词。注音是:ㄉㄢㄐㄨ_。拼音是:dānjù。单据的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】单据dānjù。(1)收付钱款或东西的凭据。二、引证解释⒈收付...
据点的结构据点的结构是什么
据点的结构是:据(左右结构)点(上下结构)。据点的结构是:据(左右结构)点(上下结构)。拼音是:jùdiǎn。词性是:名词。注音是:ㄐㄨ_ㄉ一ㄢˇ。据点的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】据点jùdiǎn。(1)军队用作战斗行动凭借的地点,一般...
确据的结构确据的结构是什么
确据的结构是:确(左右结构)据(左右结构)。确据的结构是:确(左右结构)据(左右结构)。拼音是:quèjù。注音是:ㄑㄩㄝ_ㄐㄨ_。确据的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】真实可靠的证据。二、引证解释⒈真实可靠的证据。引《好逑传》第九回:...
据梧的结构据梧的结构是什么
据梧的结构是:据(左右结构)梧(左右结构)。据梧的结构是:据(左右结构)梧(左右结构)。拼音是:jùwú。注音是:ㄐㄨ_ㄨ_。据梧的具体解释是什么呢,我们通过以下几个方面为您介绍:一、词语解释【点此查看计划详细内容】1.靠着梧几。2.操琴。二、引证解释⒈靠着梧几。引《庄子·齐物论》:“...
二级c公共基础知识
栈也是线性表,也可以采用链式存储结构。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。 疑难解答:在链式结构中,存储空间位置关系与逻辑关系是什么?在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的...
辟钱金龙: 所谓先序、中序和后序的区别在于访问根的时机,分别是BLR、LBR和LRB,其中B、L、R分别表示根结点、根结点的左子树和根结点的右子树.以后序遍历为例进行讲解.后序遍历算法:(1) 后序遍历根结点的左子树;(2) 后序遍历根结...
泰和县17621967931: 数据结构C++转换实验 -- 顺序表基本操作的实现?
辟钱金龙: #include <stdio.h> #include <stdlib.h> #define OVERFLOW 0x100 const int initsize=50; const int increment=20; struct sqlist { int *elem; int length; int listsize; }; //1. 建表子函数 int creatlist(sqlist &l,int n) {//输入n个数,建立顺序表l int i,...
泰和县17621967931: 数据结构的二叉树的遍历 - ?
辟钱金龙: 三种遍历:1、先根遍历,根→左→右;2、中根遍历,左→根→右;3、后根遍历,左→右→根; 限于字数,代码发不上来,要代码百度Hi我
泰和县17621967931: 建立顺序表,实现顺序表的遍历,在顺序表中查找关键字为e的元素(c语言编写) - ?
辟钱金龙: 楼主我大二 也刚上数据结构耶 这是我上实验课的时候用链表写的 还没交老师看 功能还差一个 可能还bug 楼主你看看~~ /*1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La--模板已提供参考(2)将La置为空表(3)销毁La(4)在...
泰和县17621967931: 数据结构中"遍历"是什么意思? - ?
辟钱金龙: 所谓遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础. 扩展资料: 树的遍历是树的一种重要的运...
泰和县17621967931: C#如何遍历数据结构??
辟钱金龙: 这个咋说呢?数据结构有无数种,任何人都可以根据自己的需求设计适合的数据结构,至于遍历,方法也要根据具体的结构进行设计啊,大体上常用的遍历有几种:顺序容器的遍历、树的遍历以及图(网络)的遍历.顺序的遍历很好想了,由首...
泰和县17621967931: 数据结构二叉树怎么遍历啊?? - ?
辟钱金龙: 拿先序遍历举例: 先序遍历 是根左右 先遍历根A,然后遍历A的左子树(是左面那一群),然后遍历A的右子树(为空). 在A的左子树中,先遍历根也就是B,在遍历B的左子树也就是C,在遍历B的右子树,是右边的一群. 在B的右子树中继续…………
泰和县17621967931: C语言数据结构“遍历二叉树” - ?
辟钱金龙: [答案]: ////////////////////////////////////////////////// 使用方法: 输入树的节点,输入0结束 1 2 3 4 5 6 7 8 9 0 中序打印 1->2->3->4->5->6->7->8->9-> 后序打印 9->8->7->6->5->4->3->2->1-> 前序打印 1->2->3->4->5->6->7->8->9-> 程序原码: ////////////////////////////////...
泰和县17621967931: 怎样用数据结构编写遍历二叉树的程序啊??
辟钱金龙: 实现二叉树的前序中序和后序遍历: #include class tree { public: int data; tree *Lchild; tree *Rchild; int x; void BuildTree(tree *p) { cin x; if(x==0) { p- data=0; } else { p- data=x; p- Lchild=(tree *)new(tree); BuildTree(p- Lchild); p- Rchild=(tree *)new(tree); BuildTree(p- Rchild); } } //先序输出 void preorder(tree
泰和县17621967931: 计算机,数据结构,二叉树的遍历,先序遍历,后序遍历,中序遍历,急急急急急急,跪求高手帮助?
辟钱金龙: 中序遍历为ABCD,前序遍历序列为CABD 前序遍历先访问根,所以C为根,在中序遍历中先访问左子树,再访问根,最后访问右子树,所以在中序序列中,C前面的为左子树,第二个访问的是左子树的根A以此类推可得这样的一棵二叉树: C / \ A D \ B 对这棵二叉树后序遍历可得后序序列为BADC