c savelink
来源:互联网 发布:c语言程序编程 编辑:程序博客网 时间:2024/06/08 10:07
1 drink.h
#ifndef _DLINK_H#define _DLINK_H#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node* pior; struct node* next;}NODE,*linknode;/* struct node { int data; struct node* pior; struct node* next; } typedef struct node NODE typedef struct node* linknode */linknode createLinknode();linknode insertLinknode(linknode head,linknode p);void insertLinknode_h(linknode *head,linknode p);linknode deleteLinknode(linknode head,int data);linknode deleteLinknode_l(linknode head,int data);void showLinknode(linknode head);void freeLinknode(linknode head);int lengthLinknode(linknode head);linknode searchLinknode(linknode head,int data);int saveLinknode(linknode head);linknode readLinknode();#endif
2 drink.c
#include"dlink.h"linknode readLinknode(){ FILE *fp=fopen("linknode.txt","r"); linknode p=NULL,head=NULL,tail; int ret=0; while(!feof(fp)) { p=(linknode)malloc(sizeof(NODE)); ret=fscanf(fp,"%d\n",&p->data); p->next=NULL; p->pior=NULL; if(ret==0) break; if(head==NULL) { head=p; tail=p; } else { tail->next=p; p->pior=tail; tail=p; } } fclose(fp); return head;}linknode createLinknode(){ linknode p=(linknode)malloc(sizeof(NODE)); if(p==NULL) { printf("申请空间失败\n"); return NULL; } printf("输入数据:\n"); scanf("%d",&p->data); p->next=NULL; p->pior=NULL; return p;}void insertLinknode_h(linknode* head,linknode s){ if(*head==NULL) { *head=s; return ; } s->next=*head; (*head)->pior=s; *head=s; return ;}linknode insertLinknode(linknode head,linknode p){ linknode tail=head; if(head==NULL) { head=p; return head; } while(tail->next!=NULL) { tail=tail->next; } tail->next=p; p->pior=tail; return head;}linknode deleteLinknode(linknode head,int data){ linknode p=head; if(head==NULL) return NULL; while(p!=NULL) { if(p->data==data) { if(p==head) { head=head->next; if(head!=NULL) head->pior=NULL; else { free(p); return NULL; } free(p); break; } else { p->pior->next=p->next; if(p->next!=NULL) p->next->pior=p->pior; free(p); break; } } p=p->next; } if(p==NULL) printf("没有删除的数据\n"); return head;}linknode deleteLinknode_l(linknode head,int data){ if(head==NULL) return NULL; linknode s=(linknode)malloc(sizeof(NODE)); linknode p=head; s->pior=NULL; s->next=head; head->pior=s; head=s; while(p!=NULL) { if(p->data==data) { p->pior->next=p->next; if(p->next!=NULL) p->next->pior=p->pior; free(p); break; } p=p->next; } if(p==NULL) printf("没有删除的数据\n"); p=head; head=head->next; if(head!=NULL) head->pior=NULL; free(p); return head;}void showLinknode(linknode head){ linknode p=head; linknode tail; if(head==NULL) { printf("空链表\n"); return ; } printf("从前到后遍历链表:\n"); while(p!=NULL) { printf("%-4d",p->data); if(p->next==NULL) tail=p; p=p->next; } printf("\n从后到前遍历链表:\n"); while(tail!=NULL) { printf("%-4d",tail->data); tail=tail->pior; } printf("\n");}int lengthLinknode(linknode head){ linknode p=head; int length=0; if(head==0) return length; while(p!=NULL) { length++; p=p->next; } return length;}linknode searchLinknode(linknode head,int data){ linknode p=head; if(head==NULL) return NULL; while(p!=NULL) { if(p->data==data) return p; p=p->next; } if(p==NULL) return NULL;}void freeLinknode(linknode head){ linknode p=head; if(head==NULL) return; while(p!=NULL) { head=head->next; free(p); p=head; }}
3 savelink.c
#include"dlink.h"int saveLinknode(linknode head){ if(head==NULL) { printf("空链表\n"); return -2; } FILE *fp; fp=fopen("linknode.txt","w+"); if(fp==NULL) { printf("文件打开失败\n"); return -1; } linknode p=head; while(p!=NULL) { fprintf(fp,"%-4d\n",p->data); p=p->next; } fclose(fp); return 0;}
4 main
#include"dlink.h"int main(){ linknode head=NULL; linknode p=NULL; int id,data,length,ret; /* for(;;) { p=createLinknode(); if(p==NULL) { printf("添加失败\n"); continue; } if(p->data==0) { free(p); break; } insertLinknode_h(&head,p);// printf("是否继续输入(0:退出):");// scanf("%d",&i);// if(i==0)// break; //printf("链表的第%d个结点\n",id); }*/ head=readLinknode(); showLinknode(head); if((ret=saveLinknode(head))<0) printf("文件保存失败\n"); length=lengthLinknode(head); printf("链表长度length=%d\n",length); printf("输入查找的数据:"); scanf("%d",&data); p=searchLinknode(head,data); if(p==NULL) printf("没有找到数据\n"); else printf("查找的数据data=%d\n",p->data); printf("输入删除的数据:"); scanf("%d",&data); head=deleteLinknode(head,data); showLinknode(head); freeLinknode(head);}
0 0