一个简单的C语言的双链表的代码

代码分为4部分 ,list.c,test.head.h   Makefile

list.c

#include"head.h"

//创建一个双链表(空)
Linklist link_list_creat()
{
   Linklist L,s,r;
   L=(Linklist)malloc(sizeof(Lnode));
   if(L==NULL)
   {
	   printf("apply  is fail\n");
	   return NULL;
   }
   L->date=0;
   L->next=L;
   L->prior=L;
   r=L; 

    int x;
	while(1)
	{
	   printf("please input is  value:");
	   scanf("%d",&x);
	   if(x==-1)
	   {
		   break;
	   }

        s=(Linklist)malloc(sizeof(Lnode));
		if(s==NULL)
		{
           printf("apply is  failed\n");
		   return NULL;
		}
	    s->date=x;

        s->prior=r;
    	s->next=r->next;
        r->next=s;
        L->prior=s;
        r=s;
	 }
   return L;
}

//数据查找
Linklist link_list_find(Linklist L,int n)
{
    Linklist p;
    p=L->next;
	int j=0;
    if(n<0)
	{
		printf("n is  not exist\n");
		return NULL;
	}
	while(p!=L&&j<n)
	{
		p=p->next;
		j++;
    }
	if(j==n)
	{
	  return p;
	 }
	else
	{
	   return NULL;
	}
}

/*
//数据查找
Linklist link_list_find(Linklist L,int n)
{
    Linklist p;
    p=L->next;
	int j=0;
    if(n<0)
	{
		printf("n is  not exist\n");
		return NULL;
	}
	while(j<n)
	{
		p=p->next;
	    j++;
		if(p==L)
		{
           printf("is  not exit\n");
		   return NULL;
		}
   }
	return p;
}*/



//数据的插入使用
int link_list_inset(Linklist L,int i,int value)
{
     Linklist p,s;
     s=(Linklist)malloc(sizeof(Lnode));
	 if(s==NULL)
	 {
		 printf("apply is  fail\n");
		 return 1;
	 }
	 s->date=value;
	 p=link_list_find(L,i);
	 if(p==NULL)
	 {
        printf("apply is  fail\n");
	    return 1;
	 }
     s->prior=p->prior;
	 s->next=p;
	 p->prior->next=s;
	 p->prior=s;
	 return 0;
}

//数据的删除
int link_list_del(Linklist L,int i)
{
     Linklist p;
	 p=link_list_find(L,i);
	 p->prior->next=p->next;
	 p->next->prior=p->prior;
	 free(p);
	 p=NULL;
     return 0;
}
//遍历
void link_list_show(Linklist L)
{
   Linklist p;
   p=L->next;
   while(p!=L)
   {  
	   printf("%d ",p->date);
	   p=p->next;
   }
   printf("\n");
}

head.h

#ifndef  __HEAD_H
#define  __HEAD_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct  link_list{
     int date;
	 struct  link_list *next;//后继
	 struct  link_list *prior;//前驱
}Lnode,*Linklist;

Linklist  link_list_creat();
extern void  link_list_show(Linklist L);
Linklist link_list_find(Linklist L,int n);
int  link_list_inset(Linklist L,int n,int value);
int  link_list_inset_tail(Linklist L);
int link_list_del(Linklist L,int i);
#endif

test.c

#include"head.h"
int main(int argc,char *argv[])
{
   Linklist L;
   L=link_list_creat();

   link_list_show(L);
   
   link_list_del(L,2);
   link_list_show(L);
   return 0;
}

Makefile

CC=gcc
CFLAGS=-c  -O  -Wall
obj=list.o test.o 
yuxiang:$(obj)
	$(CC) -o $@  $^
%*.o:%*.c
	$(CC) $(CFLAGS)  -o  $@  $<
.PHONY:clean 
clean:
	rm -rf  *.o  yuxiang

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值