链表(C语言)

初学数据结构,写的链表程序,目前还有点问题(头结点的0),望大牛指点

#include<stdio.h>
#include<stdlib.h>
typedef struct Node Linklist;
typedef struct Node * PLinklist;

struct Node{
                int num;
                PLinklist Next;
            };

void In_Linklist(PLinklist P,int num,int n);
PLinklist New_Linklist(void);
void display(PLinklist P);
/*在num结点后插入一个新结点n*/
void In_Linklist(PLinklist P,int num,int n)
{
    PLinklist Node;
    PLinklist New;
    PLinklist Old;
    Node=P;
    while(Node->num!=num)
    Node=Node->Next;
    Old=Node->Next;
    New=malloc(sizeof(Linklist));
    if(New==NULL)
    printf("The memory is full!\n");
    New->num=n;
    New->Next=Old;
    Node->Next=New;
}
/*创建一个新链表*/
PLinklist New_Linklist(void)
{
    PLinklist New;
    New=malloc(sizeof(Linklist));
    if(New==NULL)
    printf("The memory is full!\n");
    New->num=0;
    New->Next=NULL;
    return New;
}
/*从头打印链表结点*/
void display(PLinklist P)
{
    PLinklist New;
    New=P;
    while(New->Next!=NULL)
    {
        printf("%d\n",New->num);
        New=New->Next;
    }
        printf("%d\n",New->num);
}
/*在链表P末尾插入心结点n*/
void Insert_Linklist(PLinklist P,int n)
{
    PLinklist New;
    PLinklist Old;
    Old=P;
    while(Old->Next!=NULL)
        Old=Old->Next;
    New=malloc(sizeof(Linklist));
    if(New==NULL)
    printf("The memory iS full!\n");
    New->num=n;
    New->Next=NULL;
    Old->Next=New;
}
/*删除P链表中n结点*/
void Del_Linklist(PLinklist P,int n)
{
    PLinklist Node;
    PLinklist Old;
    PLinklist New;
    Node=P;
    while(Node->Next->num!=n)
        Node=Node->Next;
        Old=Node;
        New=Old->Next;
        Old->Next=New->Next;
        free(New);
}
/*在链表P中搜索n*/
int Find(PLinklist P,int n)
{
    PLinklist Node;
    int flag=0;
    Node=P;
    while(Node!=NULL )
    {
        if(Node->num==n)
        {
        flag=1;
        break;
        }
//      printf("The 'n' is not in P  linklist!\n ");
        Node=Node->Next;
    }
}
/*求两个链表的并*/
PLinklist Union(PLinklist P1,PLinklist P2)
{
    PLinklist P;
    PLinklist node;
    P=New_Linklist();
    node = P1;
    while(node!=NULL)
        {
            Insert_Linklist(P,node->num);
            node=node->Next;
        }
    node=P2;
    while(node!=NULL)
        {
            if(!Find(P1,node->num))
            Insert_Linklist(P,node->num);
            node=node->Next;
        }
    return P;
}
/*求两个链表的交*/
PLinklist Intersect(PLinklist P1,PLinklist P2)
{
    PLinklist P,Node;
    P=New_Linklist();
    Node=P1;
    while(Node!=NULL)
    {   
        if(Find(P2,Node->num))
            Insert_Linklist(P,Node->num);
        Node=Node->Next;
    }
    return P;   
}
/*求两个链表的余i(P1相对于P2的余)*/
PLinklist Complement(PLinklist P1,PLinklist P2)
{
    PLinklist P;
    PLinklist Node;
    P=New_Linklist();
    Node=P1;
    while(Node->Next!=NULL)
    {
        if(!Find(P2,Node->num))
            Insert_Linklist(P,Node->num);
        Node=Node->Next;
    }
    return P;   
}
/*生成一个链表并打印出来*/
int main(void)
{
    int i;
    PLinklist Head1,Head2;
    Head1=New_Linklist();
    Head2=New_Linklist();
    for(i=1;i<10;i++)
    {
//      In_Linklist(Head,i,i+1);
        Insert_Linklist(Head1,i);
//      Insert_Linklist(Head2,i);
    }
    for(i=8;i<18;i++)
        {
            Insert_Linklist(Head2,i);
        }
//  Del_Linklist(Head,5);
//  display(Union(Head1,Head2));
//  display(Intersect(Head1,Head2));
    display(Complement(Head1,Head2));
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值