文章

20

粉丝

224

获赞

56

访问

136.8k

头像
不带头结点的单链表排序
P1015 贵州大学机试题
发布于2022年1月29日 14:34
阅读数 8.3k

代码较为简洁,我看挺多题解定义的链表都是存在头结点的,而我这里实现的是不带头结点的单链表排序,排序算法使用的是冒泡排序,因为冒泡排序是相邻两个元素进行比较交换,适合链表。

#include<stdio.h>
#include<malloc.h>

struct Node{
	int Element;  // 节点中的元素 
	struct Node *Next;  // 指向下一节点 
} Node; // 这里如果不加结构体变量定义,第13行的sizeof(Node)会报错:Node未定义,但是我在本地编译器上却没问题,可能是这个OJ的问题

// 创建单链表 
struct Node *create() {
	struct Node *head, *now, *pre;  // 单链表的第一个节点、当前节点、上一节点 
	for (int i = 0; i < 5; ++i) {
		now = (struct Node *) malloc (sizeof(Node));
		if (i == 0) {
			head = now;  // 初始化第一个节点为首次输入的节点 
			pre = now;  // 初始化上一节点,后面会进行更新 
		}
		scanf("%d", &(now->Element));
		pre->Next = now;
		pre = now;
	}
	return head;
}

// 按照题目要求输出 
void print(struct Node *head) {
	struct Node *p, *q;
	// 对单链表中的节点元素进行冒泡排序 
	for (int i = 0; i < 5; ++i) {
		p = head;
		for (int j = 0; j < 4-i; ++j) {
			if (p->Element > p->Next->Element) {
				int temp = p->Element;
				p->Element = p->Next->Element;
				p->Next-...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发