2012年(106)
分类: C/C++
2012-05-08 00:57:40
实验十一 结构体程序设计(二)
一.实验目的
1. 掌握链表的基本概念与定义方法;
2. 掌握链表、共用体的程序设计。
二.实验环境
1. 硬件:PII以上计算机;
2. 软件:Windows、Visual 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个整数,将它们按奇、偶数分别存储在odd或even两个链表中,(两次)调用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);
}