链表的基本操作

来写博客了,休息了一段时间先来看看

休息一天,继续奋斗。。。。。。。。。
基本步骤与顺序表基本差不多,首先说下该链表的头结点是存储数据的。
建立
ChainList.h
代码如下:

#include "stdio.h"
 typedef struct Node
 {
   DATA data;
   struct Node *next;    
 } ChainListType;//定义的结点类型,其中包括该节点数据和下个结点的地址 ,同时也代表了整个链表 ,也可以分开定义书上就是分开定义的 
 
 ChainListType *ChainListAddEnd(ChainListType *head,DATA data);//在链表尾部插入结点data 
 ChainListType *ChainListAddFirst(ChainListType *head,DATA data);// 在链表首部插入结点data 
 ChainListType *ChainListFind(ChainListType *head,char *key);//按关键字查找返回当前结点 
 ChainListType *ChainListInsert(ChainListType *head ,char *key,DATA data);//按关键字查找后在指定位置插入结点 

 int ChainListAll(ChainListType *head);//查找链表长度 




接着是实现这些方法:
建立ChainList.c
//下面进行链表的基本操作的具体步骤
#include "stdio.h"
ChainListType *ChainListAddEnd(ChainListType *head,DATA data)//在链表尾部插入结点data
{
   ChainListType *h,*node;
    if(!(node =(ChainListType *)malloc(sizeof(ChainListType))))
    {
       printf("分配内存失败");
       returnNULL;   
    }
   node->data = data;
   node->next = NULL;
    if(head ==NULL)
    {
       head = node;
       return head;
    }
   h=head;
   while(h->next!=NULL)
    {
       h=h->next;
    }
    h->next =node;
    returnhead;
}

//在链表首部插入结点data
ChainListType *ChainListAddFirst(ChainListType *head,DATA data)//在链表尾部插入结点data
{
   ChainListType *node;
    if(!(node =(ChainListType *)malloc(sizeof(ChainListType))))
    {
       printf("分配内存失败");
       returnNULL;   
    }
   node->data = data;
   node->next = head;
    head =node;
    returnhead;
  
}

//按关键字查找返回当前结点
ChainListType *ChainListFind( ChainListType *head,char *key)
{
    ChainListType *h;
    h = head;
    while(h)
    {
         if(strcmp(h->data.key,key)==0)
         {
             return h;
         }
         h = h->next;  
    }
    return NULL; 
}
 
//按关键字查找后在指定位置插入结点
ChainListType *ChainListInsert(ChainListType *head ,char *key,DATAdata)
{
    ChainListType *node ,*node1;
    if(!(node =(ChainListType *)malloc(sizeof(ChainListType))))
    {
        printf("分配内存失败");
        return 0;
    } 
    node->data = data;
    node1 = ChainListFind(head,key);
    printf("%s",node1->data.key);
    if(node1)
    {
       node->next = node1->next;
       node1->next = node;
    }    
    else
    {
        free(node);
         printf("没查找到要插入的区域");
    }
    return head;
    
}



//查找链表长度
int ChainListAll(ChainListType *head)
{
    ChainListType *h;
    int i=0;
    h = head;
    while(h)
    {
        i++;
       h= h->next;
    }    
    return i;
}




最后一个测试文件

#include "stdio.h"
#include "string.h"
typedef struct 
{
    char key[15];
    char name[15];
    int age;
}DATA;

#include "ChainList.h"
#include "ChainList.c"

//遍历整个链表、
void ChainListFindAll(ChainListType *head)
{
    ChainListType *h;
    DATA data;
    h = head;
    printf("链表所包含的内容如下"); 
    while(h)
    {
        data = h->data;
        printf("<%s %s %d>\n",data.key,data.name,data.age);
        h = h->next;
    }
    return;
} 

int main()
{
    ChainListType *head=NULL; 
    DATA data; 
    char findkey[15],key[15];
    printf("插入数据,包括编号,姓名,年龄然后关键字为0退出\n");
   while(1)
    {
      fflush(stdin);
        scanf("%s",data.key);
        if(strcmp(data.key,"0")==0) {break;}
        scanf("%s%d",data.name,&data.age);
        head = ChainListAddEnd(head,data);
    }  
    printf("该链表共有%d个结点\n",ChainListAll(head));
    ChainListFindAll(head);
    printf("插入数据的位置关键字输入");
    scanf("%s",&findkey); 
    printf("输入要插入的数据");
    scanf("%s%s%d",data.key,data.name,&data.age);
   head= ChainListInsert(head,findkey,data);
   ChainListFindAll(head);
   
    while(1);
    return 0;
}

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值