c语言描述:数据结构【三.线性表】(双链表的使用)

17 篇文章 0 订阅
11 篇文章 1 订阅

结构体使用

#include<stdio.h>
#include<malloc.h>
# include <stdlib.h>
typedef struct doublenode
{  
   int data;
   struct doublenode*prior;
   struct doublenode*next;
}Doublenode,*pDoublenode;//相当于struct doublenode,struct*doublenode

创建双链表

pDoublenode initdoublenode()
{  
   int len,i,val;
   pDoublenode phead =(pDoublenode)malloc(sizeof(Doublenode));
   phead ->prior=NULL;phead->next=NULL;phead->data=0;//进行初始化
   pDoublenode temp=phead;//(利用tmp暂时指向头结点,方便之后的操作
   if (NULL == phead)
   {
      printf("分配失败, 程序终止!\n");
      exit(-1);
   }
   printf("请输入您需要生成的链表节点的个数: len = ");
	scanf("%d", &len);
   for(i=0;i<len;i++)
   {
      printf("请输入第%d个节点的值:",i+1);//从一开始数
      scanf("%d",&val);
      pDoublenode pNew =(pDoublenode)malloc(sizeof(Doublenode));
      pNew->prior=NULL;pNew->next=NULL;//初始化
      if (NULL == pNew)
		{
			printf("分配失败, 程序终止!\n");
			exit(-1);
		}
    pNew->data=val;
    temp->next=pNew;//头结点的尾指下一个节点
    pNew->prior=phead;//新节点的头指向头结点
    temp=pNew;//永远指向最后一个节点,则方便循环创建链表
    pNew->next=NULL;//方便遍历等函数判断是否结束
   }
   return phead;
}

遍历双链表

void traverse(pDoublenode phead)
{
   pDoublenode temp=phead->next;//用一个新的指针指向头节点的下一个链表,头节点并不存储数据
   while (temp)
   {
      if (temp->next == NULL)
      {
         printf("%d\n", temp->data);
      }
      else 
      {
        printf("%d <-> ", temp->data);
      }
        temp = temp->next;//指向下一个
   }
}

删除某个元素

pDoublenode delete(pDoublenode head, int data) 
{
    pDoublenode temp = head;
    //遍历链表
    while (temp) 
    {
        //判断当前结点中数据域和data是否相等,若相等,摘除该结点
        if (temp->data == data) 
        {
            temp->prior->next = temp->next;
            temp->next->prior = temp->prior;
            free(temp);
            return head;
        }
        temp = temp->next;
    }
    printf("链表中无该数据元素\n");
    return head;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值