分享
 
 
 

留言簿程序的编写

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

1、构造留言簿的结构

一个留言必不可少的是内容、其次是留言的日期和时间。和们就按这两点定义留言记录的结构。

strUCt record

{

struct date t_date; /*留言日期*/

struct time t_time; /*留言时间*/

char event[100]; /*留言内容*/

struct record *next; /*指向下一个节点的指针*/

};

在上结构的定义中,用字符串event[100]存放留言内容,结构成员t_date存放留言的日期,t_time存放留言的时间。结构data和time的定义是Turbo C提供的。它们的定义分别如下所示:

struct date

{

int da_year;

char da_day;

char da_mon;

};

struct time

{

unsigned char ti_min;

unsigned char ti_hour;

unsigned char ti_hund;

unsigned char ti_sec;

};

2、入队操作

入队操作比较简单,只要能找到队列的最后一个节点(即尾节点)修改尾节点的指针域,让其指针指向新增加的节点即可。于是问题的要害就在于如何找到尾节点,或是找到尾节点的指针域。

这里采用设置头节点和尾指针的方法来完成入队操作。

队列在还没有任何一条记录时称为队空。此时我们在队列中设置一个不存放任何记录的节点,称为“头节点”(采用头节点的好处在以后会体现出来),由于并无记录,我们设置的指向队尾的尾指针也指向这个头节点。

一旦需要添加记录,就让尾指针指向新节点(称为节点1),而后把节点1的指针域赋给尾指针。由于尾指针为头节点的指针域,这样含头节点就链接了节点1,即头节点的指针指向节点1,形成了链的初始模型。当增加第二个节点(称为节点2)时,仍然修改尾指针,让其指向节点2,而后把节点2的指针域赋给尾指针。由于原来尾指针为节点1的指针域,因此节点1和节点2又链接在一起。现在的队列由头节点、节点1和节点2相互链接而成。依此类推,链队就通过修改尾指针的值形成了。

入队操作的基本算法如下所示:

void queue_add(struct element *rear,struct element *p)

{

p->next=NULL;

rear->next=p;

rear=p;

}

其中rear即为尾指针,而指针p指向新增的节点。算法的流程和上述完全一样。

录入留言记录的函数代码如下所示:

void Data_Input(struct record *p)

{

struct data *d;

struct time *t;

front++;

getdate(t); /*取系统时间*/

p->t_time.ti_hour=ti_hour;

p->t_time.ti_min=ti_min;

p->time.ti_sec=ti_sec;

printf("\n\n\nDate:%4d %2d %2d",p->t_date.da_year,p->t_date.da_mon,p->t_date.da_day);

printf("\nTime: %2d: %2d: %2d",p->t_time.ti_hour,p->t_time.ti_min,p->t_time.ti_sec);

printf("\n\n\tPlease input record:");

gets(p->event); /*输入留言内容*/

p->next=NULL;

}

上述函数中,采用了getdate()和gettime()两个函数用来获取系统的日期和时间。这两个函数只返回指向当前日期和时间的两个指针,还需要将值立即赋给留言记录中的结构成员。

3、出队操作---留言记录的删除

和入队操作相反的是出队操作,即在队头将记录删除,这也是符合“先进先出”的原则的。

由于设置了头节点,因此出队操作显得非常简单。只需要修改头节点的指针域,让其指向第二个节点即可。而第一个节点则将其释放掉。其余节点,包括尾指针都不必做任何修改操作。

例如一个队列原本由头节点、节点1和节点2相链而成,执行出队操作时,相当于将头节点和节点1、节点1和节点2之间的两条链断开,而用断链将头节点和节点2链上,多出来的节点1将其释放掉。

典型的出队操作算法如下:

void queue_delete(struct element head)

{

struct element *temp;

temp=head.next->next;

head.next=temp;

}

在执行出队操作时,一定要记住需要将出队的节点释放。由于采用链式存储,事先无法估计需要多大的存销售市场空间,也不必去估计。每次新增一个节点时,都是调用内存分配函数为新节点申请一块内存,如下所示:

p=malloc(sizeof(struct record)

函数malloc开辟了一块大小为record 结构元素的内存区域,把掻向该区域的指针赋给指针p,这块内存单元的所有权就从系统转移到了指针p。当p指向的数据元素被删除(出队)时,一定要用如下方式将内存单 所有权还给系统:

free(p);

函数free()的作用和malloc()刚好相反,它将指定的内存单元还给了系统。因为系统的内存单元是有限的,假如不及时释放占用的内存,会造成内存资源耗尽或由于内存的减少导致程序执行速度下降。

4、记录的存取的读取

void Data_Save(struct record *p) /*记录文件的存取*/

{

int j;

fp=fopen(tele_rec.txt","w"); /*以可写方式打开记录文件*/

while(p!=NULL) /*若未到队尾,徨将记录存储到文件中*/

{

fwrite(p.sizeof(struct record),1,fp);

p=p->next;

}

fclose(fp); /*关闭指定的文件*/

}

struct event *Data_Load() /*从记录文件中读取记录*/

{

long k;

struct record *p,*q;

p=event_head.next;

fp=fopen("tele_rec.txt","r+t"); /*以读方式打开记录文件*/

if(fp!=NULL)

{

while(!feof(fp)) /*依次读取记录并执行入队操作*/

{

fread(q,sizeof(struct record),1,fp);

p->next=q; /*这里p为尾指针,q为指向新节点的指针*/

p=q;

}

p->next=NULL;

event_end=p;

}

else

{

fp=fopen("tele_rec.txt","w"); /*若文件不存在,创建指定文件名的新文件*/

event_head.next=NULL;

event_end=event_head.next;

}

}

/*-------------留言簿代码如下-------------*/

#include<stdio.h>

#include<conio.h>

#include<dos.h>

struct record

{

struct date t_date; /*定义留言日期*/

struct time t_time; /*定义留言时间*/

char event[100]; /*定义电话内容*/

struct record *next; /*指向下一个节点的指针*/

}event_head;

struct record *event_end;

int front;

FILE *fp;

void Data_Save(struct record *p) /*记录文件的存储*/

{

int j;

fp=fopen("tele_rec.txt","w"); /*以可写方式打开记录文件*/

while(p!=NULL)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有