数据结构-链表

自己学习时写的,有很多不足,以后有时间会进行优化

#include <stdio.h>
#include <malloc.h>
struct node{//链表 
	int data ;
	node* next ;
	
};
struct node_dul{//双向链表 
	int data ;
	node_dul* next ;
	node_dul* prior ;
};

int ListDelete(node* head , int a ){ //传入链表,和想要删除元素的值 
	node* flag , *shan;
	flag = head ;
	while(flag->next->data != a){
		flag = flag->next ;
	} 
	shan = flag->next ; 
	flag->next = flag->next->next ;
	free(shan) ; 
	
} 

int ListInsert(node* head , int a , int b){//传入链表的头结点,想要插入的位置a和插入的值b
	 if(a == 1){
		node* head1 ;
		head1 = (node*)malloc(sizeof(node)) ;
		head1->data = head->data ;
		head1->next = head->next ;
		head->next = head1 ;
		head->data = b ;
		
		 
	 }
	 else{
	 	node* flag , *ins;
	 	ins = (node*)malloc(sizeof(node)) ;
	 	int count =1 ;
		flag = head ;
		while(count!=a-1){
			flag =flag->next ;
			count++ ;
			
		} 
		ins->data = b ;
		ins->next = flag->next ; 
		flag->next = ins ;
		
		
	 }
	
}

int EndListInsert(node* head , int value){ //进行尾插 
	node* flag , *insert ;
	flag = head ;
	while(flag->next!= NULL){
		flag = flag->next;
	}
	insert = (node*)malloc(sizeof(node)) ;
	
	insert->data = value ;
	insert->next = NULL ;
	
	flag->next = insert ;
	
	
	
}

int InitList(){ //建立一个链表 
	node* head , *flag ;
	head = (node*)malloc(sizeof(node)) ;
	flag = head ;
	scanf("%d" , &flag->data) ;
	while(flag->data != 0) {
		flag->next = (node*)malloc(sizeof(node)) ;
		flag = flag->next ;
		scanf("%d" , &flag->data ) ;
		
	}
	flag->next = NULL ;
}

int DestroyList(node* head){ //销毁链表 
	node* flag ;
	if(head == NULL) return 0 ;
	while(head){
		head->next = flag ;
		free(head) ;
		head = flag ;
	}
}

int ClearList(node* head){ //将链表重置为空表 
	node* flag , *clear ;
	if(head ==NULL) return 0 ;
	clear = head->next ;
	while(clear){
		clear->next = flag ;
		free(flag) ;
		clear = flag ; 
	}
	
}

int TraversalList(node* head){ //遍历链表 
	node* flag ;
	flag = head ;
	while(flag != NULL){
		printf("%d\n" , flag->data) ;
		flag = flag->next ;
	}
}

int ListLength(node* head){ //判断链表长度 
	if(head ==NULL) return 0 ;
	int count = 0;
	node* flag ;
	flag = head ;
	while(flag != NULL){
		count++ ;
		flag = flag->next ;
	}
	return count ;
	
}

int InitList_Dul(node_dul* head){//创建一个双向链表 
	node_dul* flag1 ;
	head = (node_dul*)malloc(sizeof(node_dul)) ;
	flag1 = head ;
	scanf("%d", &flag1->data) ; 
	while(flag1->data != 0){
	node_dul* flag2 ;
	flag2 = (node_dul*)malloc(sizeof(node_dul)) ;
	flag2->prior = NULL ;
	flag2->next = NULL ;
	scanf("%d", &flag2->data) ;
	flag1->next = flag2 ;
	flag2->prior = flag1 ;
	flag1 = flag1->next ;
		
	}
} 

int ListInsert_Dul(node_dul* head , int i , int e){  //双向链表的插入 ,i为位置,e为数值 
	node_dul* flag , *insert;
	insert = (node_dul*)malloc(sizeof(node_dul)) ;
	int count =1 ;
	flag = head ;
	while(count!=i){
		flag =flag->next ;
		count++ ;	
		} 
	
	insert->data = e ;
	insert->prior = flag->prior ;
	flag->prior->next = insert ;
	insert->next = flag ;
	flag->prior = insert ;
	
	
}
int ListDelete_Dul(node_dul* head , int i ){ //双向链表的删除,i为位置 
	node_dul* flag ;
	int count = 1 ;
	while(count =! i){
		flag = flag->next ;
		count++ ;
	}
	flag->prior->next = flag->next ;
	flag->next->prior = flag->prior ;
	free(flag) ;
	
}


int main(){
	node_dul* head ;
	InitList_Dul(head) ;
	
	

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值