首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

分析算法时间空间复杂度!

2012-04-15 
求助分析算法时间空间复杂度!!分析一下“约瑟夫问题”算法,给出具体的算法分析结果,包括时间复杂度和空间复

求助分析算法时间空间复杂度!!
分析一下“约瑟夫问题”算法,给出具体的算法分析结果,包括时间复杂度和空间复杂度……俺是菜鸟,算不来-,-!
求高手指导!!
#include<stdio.h>
#include<malloc.h>
typedef struct Node 
{
int data;
struct Node * next;
}LNode, *LinkList; 
//建立不带头结点循环链表
LinkList Create_LinkList2() 
{
LinkList L=NULL; LNode *s,*R=NULL; int x; 
scanf("%d",&x);
while(x!=0){
s=(LinkList)malloc(sizeof(LNode));
s->data=x; 
if(L==NULL) L=s;
else R->next=s;
R=s;
scanf("%d",&x);}
if(R!=NULL) R->next=L;  
return L;
}
//找到循环链表L的第k个结点
LNode *Get_LinkList(LinkList L,int k)
{
LNode *p=L;
for(int i=1;i<=k-1;i++) /*p指向第一个出发点*/
p=p->next;
return p;
}
void jobs(LinkList L,int k,int m){
LinkList p=Get_LinkList(L,k);
LinkList q;
while(p->next!=p){
for(int i=1;i<=m-1;i++)
{
q=p;
p=p->next;
}
q->next=p->next; /*删除第m个结点*/
printf("%d",p->data); /*输出 出列人 序号*/
//释放指针p的空间
free(p);
//p指向下一个结点
p=q->next;
}
printf("%d",p->data);
}
void main()
{
LinkList L=Create_LinkList2();
int k,m;
printf("请输入开始序号K值:");
scanf("%d",&k);
printf("请输入m值:");
scanf("%d",&m);
jobs(L,k,m);
}


[解决办法]
Create_LinkList2
算法复杂度:O(N)
空间复杂度:O(1)

Get_LinkList
算法复杂度:O(N)
空间复杂度:O(1)

jobs
算法复杂度:O(N^2)
空间复杂度:O(1)

热点排行