69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
struct node{
int data;
node* next;
};
int main(){
FILE* fp1, *fp2, *fp3, *fp4;
fp1= fopen("input_data_file.txt", "r");
fp2= fopen("output_file_1.txt", "w");
fp3= fopen("delete_data_file.txt", "r");
fp4= fopen("output_file_2.txt", "w");
if(!(fp1 && fp2 && fp3 && fp4)){
printf("Error: Cannot open files for reading or writing!");
return 0;
}
node *head=NULL, *tail, *temp;
//create chain:
int Int;
while(!feof(fp1)){
if(fscanf(fp1,"%d", &Int)==EOF)
break;
if(!head){
head= tail= new node;
head->data= Int;
head->next= NULL;
}
else{
temp= new node;
temp->data= Int;
temp->next= NULL;
tail->next= temp;
tail= temp;
}
}
//sort:
node *temp2;
while(tail!=head){
temp= temp2= head;
while(temp!=tail){
if(temp->data > temp->next->data){
if(temp==head){
temp2= head->next->next;
head= head->next;
head->next->next= temp;
temp->next= temp2;
temp2= head;
}
else{
temp2->next= temp->next;
temp2= temp->next;
temp->next= temp2->next;
temp2->next= temp;
}
if(tail==temp2)
break;
}
else{
if(temp!=head)
temp2=temp2->next;
temp= temp->next;
}
}
tail= temp2;
}
//write output_file_1.txt
temp= head;
while(temp){
fprintf(fp2, "%d\n", temp->data);
temp= temp->next;
}
//delete nodes:
while(!feof(fp3)){
if(fscanf(fp3,"%d", &Int)==EOF)
break;
temp2= head;
temp= head->next;
while(head && head->data== Int){
head= head->next;
delete temp2;
temp2= head;
}
while(temp && temp->data!=Int){
temp2= temp;
temp= temp->next;
}
while(temp && temp->data == Int){
temp2->next= temp->next;
delete temp;
temp= temp2->next;
}
}
//write output_file_2.txt
temp= head;
while(temp){
fprintf(fp4, "%d\n", temp->data);
temp= temp->next;
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
return 0;
}
自己多想想了,比如
typedef struct _Node {
int data;
struct _Node* pNext; // 为了冒泡方便,可以采用双连表
struct _Node* pPrev;
}Node, *Link;
int main()
{
/*
1. 打开一个ASCII文件input_data_file.txt, 在这个文件中,
每行都有一个整数(integer),把他们存入到一个链表中(linked list
*/
FILE* fpFile = fopen("input_data_file.txt", "r");
if (fpFile != 0)
{
Link pHead = 0;
Link pCurr = 0;
Link pPrev = 0;
int data = 0;
while (fscanf(fpFile, "%d", &data) == 1)
{
pCurr = (Link)malloc(sizeof(Node));
pCurr->data = data;
pCurr->pNext = 0;
pCurr->pPrev = pPrev;
if (pHead == 0)
pHead = pCurr;
if (pPrev != 0)
pPrev->pNext = pCurr;
pPrev = pCurr;
}
fclose(fpFile);
}
return 0;
}
。。。。。
后面自己写咯,冒泡算法应该懂吧,不难,多动手