有一线性表存储在一个带头结点的循环单链表L中,写出计算线性表元素个数的算法。

作者&投稿:菜殃 (若有异议请与网页底部的电邮联系)
有一线性表存储在一个带头结点的循环单链表L中,写出计算线性表元素个数的算法~

int count(struct node *h)
{
if(h==NULL)
return 0;
int n=0;
struct node *mark = h;
do{
n++;
h = h->next;
while(h != mark);
return n;
}

int getLength(LinkList *L)
{
LinkList *p = NULL;
int len = 0;
p = L->next; //带有头结点,所以从头节点的下一个节点开始计数
while(p)
{
len++;
p = p->next;//指向当前节点的下一个节点
}
return len;
}

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}listnode,*linklist;

linklist creatlist(int n,linklist R)
{
listnode *p,*q;
int i;
R=q=(listnode*)malloc(sizeof(listnode));
for(i=1;i<n;i++)
{
p=(listnode*)malloc(sizeof(listnode));
q->data=i;q->next=p;q=p;

}
p->data=n;p->next=R;R=p;return R;

}

linklist deletenode(int n,int k,linklist R)
{
int i,j;listnode *p,*q;
p=R;
for(i=1;i<n;i++)
{
for(j=1;j<k;j++)
p=p->next;
q=p->next;
p->next=q->next;
free(q);
}
R=p;return R;

}

void outring(int n,linklist R)
{
listnode *p;p=R;printf("%d",p->data);

}

void main()
{
linklist R;int n,k;
scanf("%d%d",&n,&k);
R=creatlist(n,R);
R=deletenode(n,k,R);
outring(n,R);
}

p = head->next;
int n = 0;
while(p!=head)
{
n++;
p = p ->next;
}


线性存储结构就是顺序存储结构吗?线性表是线性存储结构吗?
不是,他们的关系可以如图所示。线性表包括顺序存储结构和链式存储结构。

线性表的逻辑顺序与存储顺序总是一致吗\/
线性表的逻辑顺序与存储顺序总是一致的。( X )顺序存储是一致的,链式不一定一致

一个线性表的储存问题
因此要改用fprintf,并把elem指向的所有数据写到文件中:fprintf(fp, "%d %d\\n", L.length, L.listsize);for (int i=0; i <L.length; i++)fprintf(fp, "%d ", L.elem[i]);同样,fread(&L,sizeof(SqList),1,fp);要改为:fscanf(fp, "%d %d\\n", &L.length, &L.listsize)...

数据结构问题
A、它们的逻辑结构不一样B、施加在其上的操作不同C、所包含的数据元素的类型不一样D、存储实现不一样第32题 (2.0) 分 单链表中增加头结点的目的是为了( )。A、使单链表至少有一个结点B、标识表结点中首结点的位置C、方便运算的实现D、说明单链表是线性表的链式存储第33题 (2.0) 分设p指向单链表中的一...

有一个线性表(a1,a2,...,an),采用带头结点的单链表L存储.设计一算法将...
LinkList p=L->next; \/* p指向第一个结点 *\/ while(p){ i++;p=p->next;} return i;} \/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) *\/ \/* 操作结果:用e返回L中第i个数据元素的值 *\/ Status GetElem(LinkList L,int i,ElemType *e){ int j;LinkList p; \/* ...

数据的存储结构包括哪四种
例:栈(既可以通过顺序存储也可以同通过随机存储)。顺序存储和链接存储的基本原理:在顺序存储中,每个存储空间含有所存元素本身的信息,元素之间的逻辑关系是通过数组下标位置简单计算出来的线性表的顺序存储,若一个元素存储在对应数组中的下标位置为i,则它的前驱元素在对应数组中的下标位置为i-1,它...

请比较:线性表、单链表、栈、队列、字符串这五个概念的区别和联系。_百...
个人理解,线性表的概念,是相对于 二叉树、图、按行存储的表格 等数据结构来区分的,体现在数据以简单的线性形式存储。链表是线性表的一种实现方式,按顺序存成数组,是另一种实现方式,其最重要的区别是:数组支持 o(1) 的随机访问,而链表访问某个元素,需要顺藤摸瓜一个一个找,因此时间复杂度...

线性表采用链式存储时,结点的存储地址是连续的吗
用任意的一组存储单元来存放线性表的结点,不同组的存储单元既可以是连续的,也可以是不连续的。线性表有顺序表和链表两种存储结构。顺序表:线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。链表:用一组任意的存储单元来存放线性表的结点,这组存储单元既可以是连续的,也可以是不...

线性表的顺序存储结构和线性表的链式存储结构分别是
数据元素称为记录,含有大量记录的线性表又称为文件。这种结构具有下列特点:存在一个唯一的没有前驱的(头)数据元素;存在一个唯一的没有后继的(尾)数据元素;此外,每一个数据元素均有一个直接前驱和一个直接后继数据元素。④在顺序存储结构中,数据元素存放在一组地址连续的存储单元中(如下图,...

线性表的顺序存储结构是随机存取的?
可以参考下面几种解释 1、解释一:顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取,与此相对 链式存储结构的存储地址不一定连续,只能通过第个结点的指针顺序存取 2、解释二:线性表的顺序存储结构可以通过线性表的首址加偏移的方法计算出来第i个数据的位置a+i*sizeof(单个结构)而...

台前县19784401244: 有一线性表存储在一个带头结点的循环单链表L中,写出计算线性表元素个数的算法. -
夷霞环孢: int getlength(linklist *l) { linklist *p = null; int len = 0; p = l->next; //带有头结点,所以从头节点的下一个节点开始计数 while(p) { len++; p = p->next;//指向当前节点的下一个节点 } return len; }

台前县19784401244: 急呀 C语言
夷霞环孢: 已测试运行通过: #include <stdio.h> #include <stdlib.h> typedef struct _list { int val; struct _list* next; } *node, list; node Insert( node head, node pos, int val ) { node tmp; tmp = ( node )malloc( sizeof( list ) ); tmp->val = val; tmp->next = pos ? pos->next...

台前县19784401244: 设线性表中的元素均为正数,采用带头结点的循环链表存储,头指针是head.试编写一个C函数sumk,求出并显示 -
夷霞环孢: #include typedef struct node { int num; node* next; }node,*link; link creat(link head) { link p,q; head=new node[sizeof(node)]; q=head; do { p=new node[sizeof(node)]; printf("请输入num:"); //结束标记为0 scanf("%d",&p->num); q->next=p; ...

台前县19784401244: 跪求 关于C语言答案 急呀............. -
夷霞环孢: 迭代求解 if( head == NULL ). return 0; list* curpointer = head->next; int cnt = 1; while( curpointer != head && curpointer != NULL ) {. curpointer = head->next;. cnt++; } return cnt;

台前县19784401244: 跪求C语言 数剧结构 编程
夷霞环孢: #include <stdio.h> #include <stdlib.h> typedef struct _list { int val; struct _list* next; } *node, list; /* 插入新节点 */ node Insert( node head, node pos, int val ) { node tmp; tmp = ( node )malloc( sizeof( list ) ); tmp->val = val; tmp->next = pos ? pos->next :...

台前县19784401244: 试写一算法在带头结点的单链表结构上实现线性表操作Length(L).下面各个步骤的解释要详细 -
夷霞环孢: intListLength_L(LinkList &L) {int i=0;//i存储链表长度,初始为0LinkList p=L;//p为链表的指针,初始为头指针,指向头结点if(p) p=p-next;//如果p指向的头结点不为空,p指向带数据的第一个结点while(p){//如果p非空,i长度加1,且指向下一个结点p=p->next;i++;}return i;//返回i,即链表的长度 }

台前县19784401244: 线性表的双向循环链表存储结构及其上的基本操作,至少要求实现10个以上的基本操作 -
夷霞环孢: /* 下面有结果 */ # include <stdio.h> # include <stdlib.h> # define TRUE 1 # define FALSE 0 # define OK 1 # define ERROR 0 typedef int Status; typedef int ElemType; typedef struct DuLNode {ElemType data;DuLNode * prior,* next; }DuLNode,* ...

台前县19784401244: 有一个带头结点的单链表L,设计一个算法使其元素递增有序. 不太理解循环里面的意思,求好心人帮讲解下 -
夷霞环孢: 这个其实是在单键表中实现直接插入的排序算法,外循环是将单链表中的每个结点的数据作入一个有序的单链表里,内循环主要作用是找到第一个不再大于待插入结点数据的前驱,以便将待排序结点插入.

台前县19784401244: 已知一个带头结点的循环单链表,编写算法,返回某个值为x的结点的地址 -
夷霞环孢: #include typedef struct node { int data; struct node* next; }lnode, *linklist; linklist creat(int n) { linklist h,r,p; int i; h=r=(linklist)malloc(sizeof(lnode)); h->next=NULL; h->data=1; for(i=2;i { p=(linklist)malloc(sizeof(lnode)); p->data=i; p->next=r->next; r->next...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网