自己学习时写的,有很多不足,以后有时间会进行优化
#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) ;
}