发信人: chaojie (chaojie), 信区: Computer
标  题: Re: 捉虫大赛分数及获奖名单公布
发信站: BBS 哈工大紫丁香站 (Sat Dec 10 16:51:32 2005)

第三部分第三题
/*
*    程序用途:单链表的就地逆置算法
*/

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


typedef int elemtype;/*定义元素类型*/
typedef struct linknode
{
    elemtype data;
    struct linknode *next;
} nodetype;/*定义结点类型,确定线性表的链式存储结构*/

nodetype *create() 
/*建立一个不带头结点的单链表,通过函数的值返回头指针*/
/*表尾插入法*/
{
    elemtype d;/*d表示输入元素的值*/
    nodetype *h=NULL,*s,*t;/*h为头指针,t为指向表尾结点的指针,s指向新结点*/
    printf("建立一个单链表(输入0结束)\n");
    
    /*i记录结点的位序号*/
    for (int i = 1;;i ++) /*循环体完成新结点的插入,以实现链表的建立*/
    {
        printf("输入第%d节点data域值:", i);
        scanf("%d",&d);
        if (d==0)  break;             /*以0表示输入结束*/
        if(i==1)                          /*建立第一个结点*/
        {
            h=(nodetype *)malloc(sizeof(nodetype)); 
            h->data = d;
            h->next = NULL;
            t=h;
        }
        else 
        {
            s=(nodetype *)malloc(sizeof(nodetype));
            s->data=d;
            s->next=NULL;
            t->next=s;
            t=s;      /*t始终指向生成的单链表的最后一个结点*/
        }
    }
    return h;/*返回头指针*/
}
void disp(nodetype *h) /*遍历显示以h为头指针的单链表*/
{
    printf("输出一个单链表:\n");
    for(nodetype *p=h;p!= NULL;p=p->next); // !!! for(nodetype *p=h;p!= NULL;p
=p->next)
        printf("%d->",p->data);
    printf("NULL\n");
}

nodetype *invert(nodetype *h)/*就地逆置单链表*/
{
    nodetype *p, *q, *r;
    if (!(h->next) || !h) // !!! if (!h||!(h->next))
    {    
        printf("逆置的单链表至少有2个节点\n");
        return NULL;
    }

    /*就地逆置*/
    for (p = h, q = p->next; q != NULL; p = q, q = r)
    {
        r = q->next;
        q->next = p;
    }
    h->next=NULL;
    h=p;
    return h;
}

void main()
{
    nodetype *head;/*定义变量head,以表示处理的单链表头指针*/
    head=create();/*建立单链表head*/
    disp(head);/*显示逆置前的单链表*/
    head=invert(head);/*调用逆置函数,实现逆置功能*/
    disp(head);/*显示逆置后的单链表*/
}
【 在 chaojie (chaojie) 的大作中提到: 】
: 第三部分第二题
: // test.cpp : Defines the entry point for the console application.
: //
: // #include "stdafx.h"
: /*
: -----------------------------------------------
: 假设有如下方程组:
: Ax=b
: ...................



--

※ 来源:·哈工大紫丁香 http://bbs.hit.edu.cn·[FROM: 202.118.249.98]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.547毫秒