发信人: 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.522毫秒