LIST

#include<iostream>
struct LIST
{
    int a;
    LIST* back;
};
int main()
{
    int n;
    scanf("%d",&n);
    LIST *list=new LIST[n];//显示开辟了n个LIST结点
    for(int i=0;i<n;i++)
    {
        list[i].a=i+1;//这是为第i个(从0数)LIST结点的数据域a赋值
        if(i!=n-1)//出于这个判断是为了形成一个环形链表,在i不等于n-1(也就是不是最后一个)的时候
            list[i].back=&list[i+1];//都是把list数组中的后一个元素(这里指的是LIST对象)的地址赋到前一个元素的指针域中,这样子就形成了链接关系
        else
            list[i].back=&list[0];//如果是最后一个结点的话,那就把第一个结点的地址赋给其指针域,以此形成了一个环形的LIST元素链表
    }
        //之前是通过赋值语句形成了一个环形链表
    LIST *P=&list[n-1];//定义LIST指针,用于指向list数组的最后一个元素
     
    for(int k=0;k<n-1;k++)
    {
        P=P->back->back->back;//原本指向list数组的最后一个元素,现在将p指向修改,改成了指向后面的第三个,因为他是环形的,所以最后一个元素的后一个就是第0个了
        P->back=P->back->back;//然后在对(p->pack,这其实是p所指向的元素的pack域中的值)的指向做一次修改,这次是在上一句的基础上,把pack->back的值修改成p的后面数第二个
    }
        //以上两句代码,循环执行n-1次,最后输出了p所指向元素中的a值
        //这代码应该是在考察链表的组织结构
    printf("%d\n",P->a);
    std::cin.get();
    std::cin.get();
    return 0;
}
//-----------------------------

#include<iostream>
#include<ctime>
using namespace std;

struct LIST
{
int a;
LIST* back;
};
int main()
{

clock_t start, finish;
double duration;
//------------------记时开始,测量一个事件持续的时间(包含输入的时间,具体可以自己调整)
start = clock(); //可以调整开始的位置
int n;
scanf("%d",&n);//输入n
LIST *list=new LIST[n];//类似数组
for(int i=0;i<n;i++)
{
list[i].a=i+1;
if(i!=n-1)
list[i].back=&list[i+1];
else
list[i].back=&list[0];
}
LIST *P=&list[n-1];

for(int k=0;k<n-1;k++)
{
P=P->back->back->back;//好像没用
P->back=P->back->back;
}
printf("%d\n",P->a);

std::cin.get(); //由于这个地方花费了时间,所以时间算出来的其实并不是算法运行时间
std::cin.get();
//---------------------------------------记时结束

finish=clock(); //可以调整结束的位置
duration=(double)(finish-start) / CLOCKS_PER_SEC;
//duration=finish-start;
cout<<"持续时间为"<<duration<<" seconds!"<<endl;
system("pause");


return 0;
}

posted @ 2013-05-14 19:16  herizai  阅读(164)  评论(0编辑  收藏  举报