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

如题所述

第1个回答  2011-03-13
#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);
}本回答被网友采纳
第2个回答  2011-03-13
p = head->next;
int n = 0;
while(p!=head)
{
n++;
p = p ->next;
}

有一线性表存储在一个带头结点的循环单链表L中,写出计算线性表元素个数...
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...

有一个线性表存储在一个带头结点的循环单链表L中,写出计算线性表元素...
return 1;}

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

试写一算法在带头结点的单链表结构上实现线性表操作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;\/\/...

试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x)按值...
Node *Locate(Node L,int x){ Node *p;p = L.next;while(p != NULL){ if (p->data == x){ return p; \/\/找到返回结点的地址 } p = p->next;} return NULL; \/\/未找到 }

试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)
int length_l(linklist *head){ linklist *p=head;int i=0;while(p!=NULL){ i++;p=p->next;} return i;} 参考书上的正确答案,我也在学数据结构,加油啊!

线性链表的带头结点的单链线性表
在线性表的链接存储中,为了方便在表头插入和删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。定义一个带头结点的线性链表...

函数:求有头结点单链表长度
define ERROR 0 define OK 1 typedef int ElemType; \/*定义表元素的类型*\/ typedef struct LNode \/*线性表的单链表存储*\/ { ElemType data;struct LNode *next;}LNode, *LinkList;\/*创建单链表*\/ int CreateList(LinkList *head);\/*函数定义*\/ int getLength(LinkList head);\/*你的代码将...

代码在一个递增有序的线性表中,有数值相同的元素存在.若存储方式为单链...
这是一个简单的单链表操作题。核心算法:用两个指针p,pre,其中pre指向p的直接前驱结点。比较p->data和pre->data是否相等,如果相等将p继续只想下一个结点(即:p=p->next),直到不相等为止。此时就要更新pre和p的值,删除pre和p之间的结点(即:pre->next=p;),接着让p指向pre的下一个结点(...

...题:用单链表作存储结构,编写一个实现线性表中元素逆置的算法_百度知 ...
struct node *next;}sqlist;void disp1(sqlist *lq){ sqlist *t=lq;while(t!=NULL){printf("%d ",t->data); t=t->next; } } void disp2(sqlist *lq){ sqlist *t=lq;while(t->next!=NULL){printf("%d ",t->data); t=t->next; } } void main(){ sqlist *lq,*q,*...

相似回答