C link

来源:互联网 发布:ios降级会丢失数据吗 编辑:程序博客网 时间:2024/05/18 03:42

1 link2.h

#ifndef _LINK2_H#define _LINK2_H#include<stdio.h>#include<stdlib.h>typedef struct node{    int data;    struct node *next;}NODE,*linknode;linknode createNode_2();linknode insertLink_2(linknode head,linknode p);linknode insertLink_2h(linknode head,linknode p);void showLink_2(linknode head);int lengthLink_2(linknode head);linknode searchLink_2(linknode head,int data);linknode deleteLink_2(linknode hea,int data);linknode deleteLink_h(linknode hea,int data);void freeLink_2(linknode head);#endif

2 link2.c

#include"link2.h"linknode createNode_2(){    linknode p=(linknode)malloc(sizeof(NODE));    if(p==NULL)    {    printf("申请空间失败:\n")    ;    return NULL;    }    printf("请输入结点信息:\n");    scanf("%d",&p->data);    p->next=NULL;    return p;}linknode insertLink_2(linknode head,linknode p){    linknode tail=head;    if(head==NULL)    {    head=p;    head->next=p;    return head;    }     while(tail->next!=head)    //tail->next!=NULL    {    tail=tail->next;    //指针后移    }    tail->next=p;    p->next=head;//尾结点指向头结点    return head;}linknode insertLink_2h(linknode head,linknode p){    linknode tail=head;    if(head==NULL)    {    head=p;    head->next=p;    return head;    }//    while(tail!=NULL)    while(tail->next!=head)    {    tail=tail->next;    }    p->next=head;    head=p;    tail->next=p;    return head;}void showLink_2(linknode head){    linknode p=head;    if(head==NULL)    {    printf("空链表\n");    return ;    }    while(1)//    {    printf("first=%d ",p->data);    p=p->next;    if(p==head)//证明为循环链表,打印第二次    {        printf("\n");        while(1)        {        printf("second=%d ",p->data);        p=p->next;        if(p==head)            break;        }        break;    }    }    printf("\n");}int lengthLink_2(linknode head){    int len=0;    linknode p=head;    if(head==NULL)    return len;    while(1)    {    p=p->next;    len++;    if(p==head)    {        return len;    }    }}linknode searchLink_2(linknode head,int data){    linknode p=head;    if(head==NULL)    return NULL;    while(1)    {    if(p->data==data)        return p;    p=p->next;    if(p==head)        return NULL;    }}//单向循环链表的删除linknode deleteLink_2(linknode head,int data){    //增加表头    linknode p=(linknode)malloc(sizeof(NODE));    linknode ph=head;    p->next=head;    linknode s,tmp;    if(p->next==NULL)//空链表    {    free(p);    return NULL;    }    if(p->next->data==data)    {    if(p->next->next==head)    //第一个结点为删除的数据且只有1个结点情况    {        free(head);        free(p);        return NULL;    }    else//第一个结点为删除数据,至少2个结点    {        s=p->next;        p->next=s->next;        free(s);        ph=p->next;        s=p->next;        while(1)        {        if(s->next==head)        {            s->next=ph;            free(p);            return ph;        }        else            s=s->next;        }    }    }    //删除其他的结点情况    else    {    if(p->next->next==head)    //只有一个结点且数据不为删除的数据    {        free(p);        return head;    }    //删除其他结点    tmp=p;//保存表头指针    while(1)    {        p=p->next;        if(p->next->data==data)        {            s=p->next;            p->next=s->next;            free(s);            free(tmp);            return head;        }    }    }}void freeLink_2(linknode head){    linknode p=head;    linknode s=head;    if(head==NULL)    return;    while(1)    {    if(p->next==head)    {        free(p);        return;    }    else     {        s=s->next;        free(p);        p=s;    }    }}

3 main

#include"link2.h"int main(){    int i,len,data;    linknode p,head=NULL;    for(i=0;i<5;i++)    {    p=createNode_2();    if(p==NULL)    {        printf("结点创建失败:\n");        continue;    }    head=insertLink_2(head,p);    }    showLink_2(head);    len=lengthLink_2(head);    printf("len=%d\n",len);    printf("请输入查找的数据:\n");    scanf("%d",&data);    p=searchLink_2(head,data);   if(p==NULL)    printf("没有找到该数据\n");    else    printf("%d\n",p->data);    printf("请输入删除的数据:\n");    scanf("%d",&data);    head=deleteLink_2(head,data);    showLink_2(head);    freeLink_2(head);    return 0;}
0 0
原创粉丝点击