c savelink

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值