Chinaunix首页 | 论坛 | 博客
  • 博客访问: 112871
  • 博文数量: 106
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 1165
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-06 12:51
文章分类

全部博文(106)

文章存档

2012年(106)

我的朋友

分类: C/C++

2012-05-08 00:57:40

实验十一 结构体程序设计(二)

一.实验目的

1 掌握链表的基本概念与定义方法;

2 掌握链表、共用体的程序设计。

二.实验环境

1 硬件:PII以上计算机;

2 软件:WindowsVisual C++ 6.0

3 其它:一张软盘或者U盘等可移动的存储设备。

三.实验内容

练习1编写一个程序,功能为输入10个整数,将它们存储在一个动态链表中。再读入一个数n,将链表从第n个结点开始重组(即以第n个结点作为头结点,而将前n-1个结点平移至链表的末尾),并输出重组后的链表结果。要求:程序包含3个子函数,各函数要求如下:

l 子函数1:功能为创建包括10个结点的链表并读入数据;

形式为:struct LNode *creat(void)

l 子函数2:功能为平移(重组)链表;

形式为:struct LNode *move(struct LNode *head,int n)

其中:函数返回值为调整后的新头指针的地址;

l 子函数3:功能为输出链表中的所有结点;

形式为:void print(struct LNode *head)

运行结果示例:

练习2编写一个程序,功能为输入并存储一组文具的明细单(以’#’作为结束)。文具的类型以(单个大写)字母标识,并且不同类型的文具其规格也不同。其中:P为铅笔,规格为铅芯直径;G为签字笔,规格为颜色;R为尺子,规格为尺子的长度(cm)。

l 要求:程序包含1个子函数,其功能要求为输出指定类型文具的信息;

形式为:voidcount(STA a[],int n,char type)

l 提示:程序中数组的类型为STA,应使用typedef定义;n为数组元素的个数;type为要统计的文具类型(单个大写字母)。

运行结果示例:

练习3编写一个程序,功能为输入10个整数,将它们按奇、偶数分别存储在oddeven两个链表中,(两次)调用print子函数以分别输出两个链表中的数据。

运行结果示例:

*练习4编写一个程序,功能为输入一组正整数(以-1作为结束标志),将它们存储在一个动态链表中并输出。然后,将链表中所有偶数值结点删除,并输出链表删除后结果。

要求:程序包含3个子函数,各函数要求如下:

l 子函数1:功能为创建包括n个结点的链表并读入数据;

形式为:NUM *creat(void)

l 子函数2:功能为输出链表中的所有结点;

形式为:void print(NUM *head)

l 子函数3:功能为删除链表中的所有偶数值结点;

形式为:NUM *dele(NUM*head)

提示:程序中结点的类型为NUM,应使用typedef定义;

运行结果示例:

正常情况:

特殊情况:

练习1

#include"stdio.h"

#include"iostream.h"

#include"stdlib.h"

#define LEN sizeof(struct LNode)

#define NULL 0

struct LNode

{int num;

struct LNode *next;

};

int i=1;

struct LNode *creat(void)

{struct LNode *head;

struct LNode *p1,*p2;

p1=p2=(struct LNode*)malloc(LEN);

scanf("%d",p1->num);

head=NULL;

for(i=1;i<=10;i++)

{

if(i==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct LNode*)malloc(LEN);

cin>>p1->num;

}

p2->next=NULL;

return(head);

}

struct LNode *move(struct LNode *head,intn)

{struct LNode *p1,*p2;

if(head==NULL){printf("\nlist null!\n");return head;}

p1=head;

while(i

{p2=p1->next;

p1=p2;

i++;

}

p2=p1->next;

head=p2;

p1->next=NULL;

return(head);

}

void print(struct LNode *head)

{struct LNode *p;

printf("\n输出链表结果:\n");

p=head;

if(head!=0)

do

{printf("%d",p->num);

p=p->next;

}

while(p!=NULL);

}

void main()

{

intn;

struct LNode *head;

printf("输入10个整数:");

head=creat();

print(head);

printf("\n输入n<1-10>");

scanf("%d",&n);

head=move(head,n);

print(head);

printf("输出链表结果:");

print(head);

}

阅读(747) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~