鱼C论坛

 找回密码
 立即注册

鱼C作业-快慢指针

热度 1已有 774 次阅读2013-3-7 11:36 |个人分类:鱼C-作业

题目:
编写一个程序,实现随机生成20个元素的链表(尾插法或头插法任意),
用利用快慢指针的方法快速查找中间结点的值并显示。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

/****************************************************/
/*链表声明*/
/****************************************************/
typedef int ElementType;
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

struct Node
{
    ElementType Element;
    Position Next;
};

/********************************************************************/
/*创建链表*/
/********************************************************************/
List Create_LinkList()
{
    Position Head;                       //头节点
    Head=(Position)malloc(sizeof(Node));
    if(Head==NULL)
    {
        printf("动态内存分配失败,程序结束!\n");
        exit(-1);
    }

    Position Tail=Head;
    Tail->Next=NULL;
 
    srand((unsigned)time(NULL));             //根据系统时钟产生随机种子
    for(int i=0;i<20;i++)
    {
        Position New=(Position)malloc(sizeof(Node));
        if(New==NULL)
        {
            printf("动态内存分配失败,程序结束!\n");
            exit(-1);
        }

        New->Element=rand()%20;
        Tail->Next=New;
                Tail=New;
        Tail->Next=NULL;
    }

    return Head;
}

/********************************************************************/
/*遍历链表*/
/********************************************************************/
void Traverse_LinkList(Position L)
{
     Position p=L->Next;                //注意
     while(p!=NULL)
     {
          printf("%d ",p->Element);
          p=p->Next;
     }
     printf("\n");
}

/********************************************************************/
/*利用快慢指针的方法输出链表的中间元素(标尺的思想)*/
/********************************************************************/
void PrintMidCell(List L)
{
    Position Search,Mid;
    Search=Mid=L;

    while(Search->Next != NULL)
    {
        if(Search->Next->Next != NULL)
        {
        Mid=Mid->Next;
        Search=Search->Next->Next;
        }
        else
        {
            Search=Search->Next;
        }
    }

    printf("这个链表的中间元素是%d ",Mid->Element);
    printf("\n");
}

/********************************************************************/
/*主函数*/
/********************************************************************/
int main()
{
    Position Head;

    Head=Create_LinkList();
    Traverse_LinkList(Head);
    PrintMidCell(Head);

    return 0;
}


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 kill?emotion 2013-3-9 20:31
新手路过,学习下

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 05:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部