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
原创粉丝点击