2. 流程框图
查找模块和载入模块的算法框图在此略。
(1)输入模块 (2)插入模块
(3)删除模块 (4)保存模块
(5)输出模块 对以上各模块的文字解释说明:
(1)输入模块:其实就是一个建立链表的操作模块。建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。首先设三个指针变量:head,ptr1,ptr2。它们都是指向结构体类型数据的。先使head的值为NULL,这是链表为空的情况。用malloc函数开辟一个结点,并使ptr1,ptr2都指向它,之后从键盘读入一个货品的数据给ptr1所指向的结点。当输入的ptr1->num不为0时,令head=ptr1;ptr2=ptr1,即把ptr1的值赋给head,使ptr2,ptr1,head都指向这一新开辟的结点,此结点就成为链表中的第一个结点。再开辟一个新结点并使ptr1指向它,读入该结点的数据,如果输入的ptr1->num不为0,则应链入这第二个结点,这时和上一个结点的处理不同,是将ptr1的值赋给ptr2->next,也就是使第一个结点的next成员指向第二个结点,接着将ptr2也指向结点2。再开辟一个新结点并使ptr1指向它,读入该结点的数据,同样将ptr1的值赋给ptr2->next,也就是使第三个结点链接到第二个结点之后,并接着将ptr1的值赋给ptr2,使ptr2指向结点3。再开辟一个新结点,并使ptr1指向它,输入该结点的数据,如果输入ptr1->num为0,则是输入结束标志,此结点不被链接到链表中,就将NULL赋给ptr2->next。建立链表过程至此结束,ptr1最后所指结点并未链入链表中。
(2)插入模块:要完成的是链表的插入操作,即将一个新结点插入到一个已有的链表中,对刚刚建立的链表,首先新设一个指针变量ptr0,并开辟一个结点使ptr3指向它,输入该结点的数据,即新货的有关数据,接下来查找要插入位置结点,找到后只需修改此结点和ptr0指向结点指针域的值即可,链表中所有元素位置均不需移动,这就体现了链表的优点。
(3)删除模块:要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。使之指向被删除结点的后面一个结点即可。
(4)保存模块:将最终想要保留的数据信息保存于文件中。
(5)输出模块:要完成的是依次输出链表中各结点的数据的操作。首先找到链表头结点的地址,也就是head的值,然后设一个指针变量ptr1,先指向第一个结点,输出ptr1所指的结点,然后使ptr1后移一个结点,再输入直至链表的尾结点结束。
四、C源程序清单
#include<stdio.h> /*标准输入/输出头文件*/
#include<conio.h> /*包含绘制图形函数等头文件*/
#include<string.h> /*包含字符串处理函数头文件*/
#include<stdlib.h> /*包含动态存储与释放函数头文件*/
#include<graphics.h>
#define LEN sizeof(COM)
#define PRINT "% -15ld% -15s% -15d\n",ptr1->num,ptr1->name,ptr1->count
#define CHECK_COUNT ptr1->count<0
#define CHECK_COUNT2 ptr3->count<0
#define NULL 0
typedef struct com
{long int num;
char name[10];
int count;
struct com *prior, *next;
}COM; /*定义结构体*/
COM *input(); /*输入货品信息*/
COM *insert( ); /*插入货品信息*/
COM *delet( ); /*删除货品信息*/
void search( ); /*查找货品信息*/
void save(COM *head); /*保存货品信息*/
COM *openfile( ); /*从文件将货品信息载入链表*/
void print( ); /*输出货品信息*/
FILE *fp; /*定义指向文件的指针变量*/
COM *head=NULL;
COM *ptr1=NULL,*ptr2=NULL;
char filename1[10]; /*定义字符数组,用来存放文件名*/
char filename2[ ]={".dat"}; /*文件扩展名.dat*/
www.751com.cn
char string3[ ]={"count"};
int n=1;
if((ptr1=(COM*)malloc(LEN))==NULL) /*申请空间函数*/
{printf("No enough memory,fail to creat linklist!");
getch( ); /*无回显的从键盘读取任意一个字符*/
}
clrscr( );
printf("Please input depend on the emply(goodsnumber==0 over):\n");
上一页 [1] [2] [3] [4] [5] [6] 下一页