24 7 31 23 26 14 19 8 9 6 43 16 22 0 39 46 22 38 41 23 19 18 14 3 41
說明
從data.dat讀入25個數字,並將這些數字加以分類(0~9、10~19、20~29、超過29以上)、計數。
/*the filename: main
*the filename extension: .c
*/
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
LIST *q0_9, *q10_19, *q20_29, *q_o_29;
void creat_four_quque(){
/* create four queue */
q0_9 = (LIST *) malloc(sizeof(LIST));
creatList(q0_9);
q10_19 = (LIST *) malloc(sizeof(LIST));
creatList(q10_19);
q20_29 = (LIST *) malloc(sizeof(LIST));
creatList(q20_29);
q_o_29 = (LIST *) malloc(sizeof(LIST));
creatList(q_o_29);
}
int main(){
FILE *f1;
int data;
int status;
creat_four_quque();
f1 = fopen("data.dat", "r");
status = fscanf(f1, "%d", &data);
while (status != EOF){
if (data <= 9) {
insertLastList(q0_9, data);
}
else if (data <= 19){
insertLastList(q10_19, data);
}
else if (data <= 29){
insertLastList(q20_29, data);
}
else {
insertLastList(q_o_29, data);
}
status = fscanf(f1, "%d", &data);
}
printList(q0_9);
printList(q10_19);
printList(q20_29);
printList(q_o_29);
}
/*the filename: list
*the filename extension: .h
*/
typedef struct node {
int data;
struct node *link;
} NODE;
typedef struct list {
int count;
struct node *head;
struct node *rear;
} LIST;
void creatList(LIST *listHead);
void insertFirstList(LIST *listHead, int data);
void insertLastList(LIST *listHead, int data);
void printList(LIST *listHead);
void dumpNode(NODE *input);
void deleteFirstList(LIST *listHead);
NODE *getFirstList(LIST *listHead);
/*the filename: list_implement_bak
*the filename extension: .c
*/
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
void creatList(LIST *listHead) {
listHead->count = 0;
listHead->head = NULL;
listHead->rear = NULL;
}
void insertLastList(LIST *listHead, int data){
NODE *pNew;
pNew = (NODE *) malloc(sizeof(NODE));
pNew->data = data;
pNew->link = NULL;
if (listHead->head == NULL){ // case 1: empty list
listHead->head = pNew;
listHead->rear = pNew;
}
else { // case 2: begining list
listHead->rear->link = pNew;
listHead->rear = pNew;
}
listHead->count++;
}
void insertFirstList(LIST *listHead, int data){
NODE *pNew;
pNew = (NODE *) malloc(sizeof(NODE));
pNew->data = data;
pNew->link = NULL;
if (listHead->head == NULL){ // case 1: empty list
listHead->head = pNew;
listHead->rear = pNew;
}
else { // case 2: begining list
pNew->link = listHead->head;
listHead->head = pNew;
}
listHead->count++;
}
void deleteFirstList(LIST *listHead){
NODE *pLoc; //為了記錄欲刪除的節點所設置
if (listHead->count == 0){
printf("Do nothing \n");
}else if (listHead->count == 1){
pLoc = listHead->head;
listHead->head = NULL;
listHead->rear = NULL;
listHead->count--;
free(pLoc);
} else {
pLoc = listHead->head;
listHead->head = pLoc->link;
listHead->count--;
free(pLoc);
}
}
NODE *getFirstList(LIST *listHead){
NODE *pLoc;
if (listHead->count == 0){
printf("Do nothing \n");
}else {
pLoc = listHead->head;
return pLoc;
}
}
void dumpNode(NODE *input){
if (input != NULL){
printf("the data =%d\n", input->data);
}
}
void printList(LIST *listHead){
NODE *curr;
if (listHead->head != NULL){
printf("the total count = %d\n", listHead->count);
for (curr = listHead->head; curr != NULL; curr = curr->link){
printf("%d\n", curr->data);
}
}
else{
printf("the list is empty\n");
}
}
說明
事實上,本程式只使用到creatList()、insertLastList()、printList()三個子函式,故可以簡化成以下:
/*the filename: main
*the filename extension: .c
*/
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
LIST *q0_9, *q10_19, *q20_29, *q_o_29;
void creat_four_queue(){
/* create four queue */
q0_9 = (LIST *) malloc(sizeof(LIST));
creatList(q0_9);
q10_19 = (LIST *) malloc(sizeof(LIST));
creatList(q10_19);
q20_29 = (LIST *) malloc(sizeof(LIST));
creatList(q20_29);
q_o_29 = (LIST *) malloc(sizeof(LIST));
creatList(q_o_29);
}
int main(){
FILE *f1;
int data;
creat_four_queue();
f1 = fopen("data.dat", "r");
while (fscanf(f1, "%d", &data) != EOF){
if (data <= 9) {
insertLastList(q0_9, data);
}
else if (data <= 19){
insertLastList(q10_19, data);
}
else if (data <= 29){
insertLastList(q20_29, data);
}
else {
insertLastList(q_o_29, data);
}
}
printList(q0_9);
printList(q10_19);
printList(q20_29);
printList(q_o_29);
return 0;
}
/*the filename: list
*the filename extension: .h
*/
typedef struct node {
int data;
struct node *link;
} NODE;
typedef struct list {
int count;
struct node *head;
struct node *rear;
} LIST;
void creatList(LIST *listHead);
void insertLastList(LIST *listHead, int data);
void printList(LIST *listHead);
/*the filename: list_implement_bak
*the filename extension: .c
*/
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
void creatList(LIST *listHead)
{
listHead->count = 0;
listHead->head = NULL;
listHead->rear = NULL;
}
void insertLastList(LIST *listHead, int data)
{
NODE *pNew;
pNew = (NODE *) malloc(sizeof(NODE));
pNew->data = data;
pNew->link = NULL;
if (listHead->head == NULL) // case 1: empty list
{
listHead->head = pNew;
listHead->rear = pNew;
}
else // case 2: begining list
{
listHead->rear->link = pNew;
listHead->rear = pNew;
}
listHead->count++;
}
void printList(LIST *listHead)
{
NODE *a;
if (listHead->head != NULL)
{
printf("the total count = %d\n", listHead->count);
for (a = listHead->head; a != NULL; a = a->link)
{
printf("%d\n", a->data);
}
}
else
{
printf("the list is empty\n");
}
}
圖片說明:


沒有留言:
張貼留言