vs 2019实现单链表的创建、插入、删除、查找、输入

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

struct List {
	int date;
	struct List* next;
};

void creatList(List** obj) {
	int a, h[20] = { 0 };

	List* head = *obj;
	printf("请选择输入元素个数和元素值:");
	scanf_s("%d", &a);
	for (int i = 0; i < a; i++) {
		scanf_s("%d", &h[i]);
		List* node = (List*)malloc(sizeof(List));
		node->next = NULL;
		head->next = node;
		node->date = h[i];
		head = head->next;
	}
}

void insertListIndex(List** obj) {
	int m, n;
	printf("请输入要插入的元素和插入位置:");
	scanf_s("%d %d", &m, &n);
	List* head = *obj;
	List* node = (List*)malloc(sizeof(List));
	if (node == NULL) {
		printf("内存分配不成功!\n");
	}
	else {
		for (int i = 1; i < n; i++) {
			head = head->next;
		}
		node->next = head->next;
		head->next = node;
	}
}

void deleteListIndex(List** obj) {
	int m;
	List* head = *obj, * q;
	printf("请输入要删除的元素的位置:");
	scanf_s("%d", &m);
	for (int i = 1; i < m; i++) {
		head = head->next;
	}
	q = head->next;
	head->next = head->next->next;
	free(q);
}

void findListInext(List* obj) {
	int m;
	List* head = obj;
	printf("请输入要查找的元素的位置:");
	scanf_s("%d", &m);
	for (int i = 0; i < m; i++) {
		head = head->next;
	}
	printf("元素是:%d\n", head->date);
}

void printList(List* obj) {
	List* head = obj;
	while (head->next != NULL) {
		head = head->next;
		printf("%d ", head->date);
	}
	printf("\n");
}

void destroyList(List** obj) {  //销毁链表
	List* node = (*obj);
	while (node != NULL) {
		node = node->next;  //p指向下一个待销毁的结点
		free(*obj);  //销毁当前结点
		(*obj) = node;   //
	}
	//(*h)=NULL; 此句可省
}

int main() {
	int a;
	List* head = (List*)malloc(sizeof(List)); 
	head->next = NULL;
	printf("1:创建链表 2:插入 3:删除 4:查找 5:输出 0:退出\n");
	while (1) {
		printf("请选择操作:");
		scanf_s("%d", &a);
		if (a == 1) creatList(&head);
		else if (a == 2) insertListIndex(&head);
		else if (a == 3) deleteListIndex(&head);
		else if (a == 4) findListInext(head);
		else if (a == 5) printList(head);
		else if (a == 0) break;
		else printf("输入错误!");
		printf("\n");
	}
	destroyList(&head);
	return 0;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
单链表是一种链式存储结构,由一个个结点构成,每个结点包含两个域:数据域和指针域。数据域用于存储数据,指针域用于指向下一个结点。以下是单链表的基本操作的C语言实现: 1.创建链表 ```c typedef struct node { int data; struct node *next; } Node; Node *createList() { Node *head = NULL; Node *tail = NULL; int num; printf("请输入链表的数据,以-1结束:"); scanf("%d", &num); while (num != -1) { Node *p = (Node*)malloc(sizeof(Node)); p->data = num; p->next = NULL; if (head == NULL) { head = p; tail = p; } else { tail->next = p; tail = p; } scanf("%d", &num); } return head; } ``` 2.删除结点 ```c Node *deleteNode(Node *head, int num) { Node *p = head; Node *prev = NULL; while (p != NULL && p->data != num) { prev = p; p = p->next; } if (p == NULL) { printf("链表中没有该结点\n"); return head; } if (prev == NULL) { head = head->next; } else { prev->next = p->next; } free(p); return head; } ``` 3.查找结点 ```c Node *searchNode(Node *head, int num) { Node *p = head; while (p != NULL && p->data != num) { p = p->next; } if (p == NULL) { printf("链表中没有该结点\n"); return NULL; } return p; } ``` 4.插入结点 ```c Node *insertNode(Node *head, int num, int index) { Node *p = (Node*)malloc(sizeof(Node)); p->data = num; p->next = NULL; if (head == NULL) { if (index == 0) { return p; } else { printf("链表为空,不能插入结点\n"); free(p); return NULL; } } if (index == 0) { p->next = head; return p; } Node *prev = head; Node *next = head->next; int i = 1; while (next != NULL && i != index) { prev = prev->next; next = next->next; i++; } if (i != index) { printf("插入位置超出链表长度\n"); free(p); return head; } prev->next = p; p->next = next; return head; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值