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

实验二 单链表应用

2012-12-21 
实验2 单链表应用实验2 单链表应用一、实验目的1.熟悉单链表的存储结构和基本操作; 2.熟悉单循环链表的操作

实验2 单链表应用

实验2 单链表应用

一、实验目的

1.熟悉单链表的存储结构和基本操作;

2.熟悉单循环链表的操作;

3.熟悉单链表的应用。

二、实验内容

1.将一个已知的单循环链表进行逆置运算,如(a1,a2,a3,…,an)变为(an,an-1,…,a2,a1)。将算法转换为程序上机实现,并按照要求撰写实验报告。

?

三、实验指导

对于单链表而言,最后一个结点的指针域是空指针,如果将该链表头指针置入该指针域,则使得链表头尾结点相连,就构成了单循环链表。对于单链表只能从头结点开始遍历整个链表,而对于单循环链表则可以从表中任意结点开始遍历整个链表。

所谓链表的逆置运算(或称为逆转运算)是指在不增加新结点的前提下,依次改变数据元素的逻辑关系,使得线性表(a1,a2,a3,…,an)成为(an,an-1,…,a2,a1)。

本题采用的算法是:先建立一个带头结点的单循环链表,从头到尾扫描单链表L,把p作为活动指针,沿着链表向前移动,每遇到一个新结点,就将此结点插入到头结点之后,直到p==L时,单循环链表倒置实现。q指向p前趋结点,r指向q的前趋结点。其中,q的next值为r,r的初值置为head。

?

四、实验要求

1.每个同学必须独立完成;

2.代码编写规范要求:程序中的开头部分必须对本程序的总体功能进行注释;程序中每个函数段必须要有注释说明该函数的功能或作用;

3.实验设计和源码撰写应在每次上机之前完成,上机时进行调试和修改、记录实验数据和结果;

4.实验报告的总结部分,应描述如下内容:

(1)单链表与顺序表区别的体会。

(2)本次实验过程的体会,是否自己独立完成?最大的困难是什么?自己准备如何解决这个困难?

5.提交实验报告。

?

?

参考实验代码:

?

#define NULL 0#include<stdio.h>#include<malloc.h>typedef struct node{    int num;    struct node *next; }linklist;void output(linklist *head) /*输出循环链表的信息*/{    linklist *p;    p=head->next;    while(p!=head)    {        printf("%d ",p->num);        p=p->next;    }    printf("\n");}linklist  *creat(int n) /*建立单循环链表*/{    int k;    linklist *head, *r, *p;    p=(linklist *)malloc(sizeof(linklist));    head=p;    r=p;    p->next=p;    for(k=1;k<=n;k++)    {       p=(linklist *)malloc(sizeof(linklist));         p->num=k;       r->next=p;       r=p;    }    p->next=head;    return(head);}linklist *invert(linklist *head) /*逆置函数*/{    linklist  *p,*q,*r;    p=head->next;    q=head;    while(p!=head)    {        r=q;        q=p;        p=p->next;        q->next=r;    }      head->next=q;     return(head);} void main(){     int n;    linklist *head;    printf("输入所建立的循环链表的结点个数:\n");    scanf("%d",&n);    head=creat(n);    printf("输出建立的单循环链表:\n");    output(head);    printf("现在进行逆置!\n");    head=invert(head);    printf("输出进行逆置运算后的单循环链表的结点信息!\n");    output(head);}

?

?

热点排行