单链表与单循环链表的C语言实现

单链表与单循环链表的C语言实现

单链表的增删查改

/*单链表*/

#include<stdio.h>
#include<stdlib.h>

typedef struct Node{
	int data;
	struct Node* next;
}Node;

Node* initList(){
	Node* node = (Node*)malloc(sizeof(Node));
	node -> data = 0;
	node -> next = NULL;
	return node;
}

void headInsert(Node* L, int data){
	Node* node = (Node*)malloc(sizeof(Node));
	node -> data = data;
	node -> next = L -> next;
	L -> next = node;
	L -> data ++;
}

void tailInsert(Node* L,int data){
	Node* tail = L -> next;
	Node* node = (Node*)malloc(sizeof(Node));
	node -> data = data;
	node -> next = NULL;
	while(tail -> next){
		tail = tail -> next;
		
	}
	tail -> next = node;
	L -> data ++;
}

void deleList(Node* L,int data){
	int flag = 0;
	Node* prevnode = L;
	Node* node = L -> next;
	while(node){
		if(node -> data == data){
			prevnode -> next = node -> next;
			free(node);
			flag = 1;
			printf("已经把%d从链表里删除了\n",data);
			L ->data --;
//			break;//!!!!!
			node = prevnode -> next;
		}else{
			prevnode = node;
			node = node -> next;
		}
	
	}
	if(!flag){
		printf("没有找到被删项\n");
	}
}

void printList(Node* L){
	Node* node = L -> next;
	while(node){
		printf("%d\n",node -> data);
		node = node -> next;
	}
	printf("\n");
}

void findList(Node* L, int data){
	Node* node = L -> next;
	while(node){
		if(node -> data == data){
			printf("已经在链表里找到了%d\n",data);
			break;
		}
		node = node -> next;
	}

}

void changeList(Node* L, int data, int newdata){
	Node* node = L -> next;
	while(node){
		if(node -> data == data){
			node -> data = newdata;
			printf("已经把链表里的%d更新为了%d\n",data,newdata);	
		}
		node = node -> next;
	}

}

int main(){
	Node* L = initList();
	headInsert(L, 1);
	headInsert(L, 10);
	headInsert(L, 100);
	tailInsert(L,2);
	tailInsert(L,20);
	tailInsert(L,200);
	printList(L);
	deleList(L,100);
	deleList(L,6);
	findList(L,20);
	changeList(L,2,8);
	printList(L);
	return 0;
}

alt text

单循环链表的增删查改

#include<stdio.h>
#include<stdlib.h>

typedef struct Node{
	int data;
	struct Node* next;
}Node;

Node* initList(){
	Node* node = (Node*)malloc(sizeof(Node));
	node -> data = 0;
	node -> next = node;
	return node;
}

void headInsert(Node* L, int data){
	Node* node = (Node*)malloc(sizeof(Node));
	node -> data = data;
	node -> next = L -> next;
	L -> next = node;
	L -> data ++;
}

void tailInsert(Node* L,int data){
	Node* tail = L -> next;
	Node* node = (Node*)malloc(sizeof(Node));
	node -> data = data;
	node -> next = L;
	while(tail -> next != L){
		tail = tail -> next;
		
	}
	tail -> next = node;
	L -> data ++;
}

void deleList(Node* L,int data){
	int flag = 0;
	Node* prevnode = L;
	Node* node = L -> next;
	while(node != L){
		if(node -> data == data){
			prevnode -> next = node -> next;
			free(node);
			flag = 1;
			printf("已经把%d从链表里删除了\n",data);
			L ->data --;
//			break;//!!!!!
			node = prevnode -> next;
		}else{
			prevnode = node;
			node = node -> next;
		}
	
	}
	if(!flag){
		printf("没有找到被删项\n");
	}
}

void printList(Node* L){
	Node* node = L -> next;
	while(node != L){
		printf("%d\n",node -> data);
		node = node -> next;
	}
	printf("\n");
}

void findList(Node* L, int data){
	Node* node = L -> next;
	while(node != L){
		if(node -> data == data){
			printf("已经在链表里找到了%d\n",data);
			break;
		}
		node = node -> next;
	}

}

void changeList(Node* L, int data, int newdata){
	Node* node = L -> next;
	while(node != L){
		if(node -> data == data){
			node -> data = newdata;
			printf("已经把链表里的%d更新为了%d\n",data,newdata);	
		}
		node = node -> next;
	}

}

int main(){
	Node* L = initList();
	headInsert(L, 1);
	headInsert(L, 10);
	headInsert(L, 100);
	tailInsert(L,2);
	tailInsert(L,20);
	tailInsert(L,200);
	printList(L);
	deleList(L,100);
	deleList(L,6);
	findList(L,20);
	changeList(L,2,8);
	printList(L);
	return 0;
}

alt text

posted @ 2025-02-25 17:52  GJ504b  阅读(21)  评论(0)    收藏  举报