链表操作以及直接插入排序

main函数:

#include <stdio.h>
#include "./03linklist.h"
int main(int argc, const char *argv[])
{
  	linkList* head = create_linkList(); 
 	insert(head,10);	
 	insert(head,20);	
 	insert(head,30);	
 	insert(head,40);	
 	insert(head,50);
	showlinklist(head);
	printf("---------------\n");
	insertTail(head,999);
	insertTail(head,888);
	insertTail(head,777);

	showlinklist(head);
	printf("---------------\n");
	deleteHead(head);

	showlinklist(head);
	printf("---------------\n");
	deleteTail(head);

	showlinklist(head);
	printf("---------------\n");
	insertByPos(head,2,10000000);
	showlinklist(head);
	printf("---------------\n");

	deleteByPos(head,2);

	showlinklist(head);
	compareInsertSort(head,8000);
	compareInsertSort(head,100);
	compareInsertSort(head,3000);
	compareInsertSort(head,48000);
	compareInsertSort(head,50000);
	compareInsertSort(head,600);

	showlinklist(head);
	return 0;
}

函数文件:

#include <stdio.h>
#include <stdlib.h>
#include "./03linklist.h"
/*
 * function:    创建一个带头结点的空的单链表
 * @param [ in] 
 * @param [out] 
 * @return      
 */
linkList* create_linkList()
{
	linkList* head = (linkList*)malloc(sizeof(linkList));
	head->text.len = 0;
	head->next = NULL;
	return head;
}

/*
 * function:    插入节点
 * @param [ in] 
 * @param [out] 
 * @return      
 */

int insert(linkList* head,int num)
{
	linkList* temp = (linkList*)malloc(sizeof(linkList));
	temp->text.data = num;
	temp->next = NULL;
	//头插法
	temp->next = head->next;
	head->next = temp;
	//更新链表长度
	head->text.len++; 
	return 0;
}

/*
 * function:    尾插法插入数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */

int insertTail(linkList* head,int num)
{	
	linkList* temp = (linkList*)malloc(sizeof(linkList));
	temp->next = NULL;
	temp->text.data = num;

	linkList* p = head;
	while(p->next != NULL)
	{
		p = p->next;
	}
	p->next = temp;
	temp->next = NULL;

	head->text.len++;
	return 0;
}

/*
 * function:    链表遍历
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void showlinklist(linkList* head)
{
	linkList* p = head;
	while(p->next != NULL)
	{
		p = p->next;
		printf("%d\n",p->text.data);
	}
	return;
}
/*
 * function:    头删法
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void deleteHead(linkList* head)
{
	linkList* temp = head->next;
	head->next = temp->next;
	free(temp);
	temp = NULL;
	head->text.len--;

}

/*
 * function:    尾删法
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void deleteTail(linkList* head)
{
	linkList* temp = head;
	while(temp->next->next != NULL)
	{
		temp = temp->next;
	}
	free(temp->next);
	temp->next = NULL;
	head->text.len--;

}

/*
 * function:    按位置插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void insertByPos(linkList* head,int pos,int num)
{
	linkList* p = head;
	for(int i = 0;i<pos-1;i++)
	{
		p = p->next;
	}

	linkList* temp = (linkList*)malloc(sizeof(linkList));
	temp->text.data = num;
	temp->next = NULL;

	temp->next = p->next;
	p->next = temp;

	head->text.len++;

}

/*
 * function:    按位置删除
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void deleteByPos(linkList* head,int pos)
{
	linkList* p = head;
	for(int i = 0;i<pos-1;i++)
	{
		p = p->next;
	}
	linkList* temp = p->next;
	p->next = temp->next;
	temp->next = NULL;
	free(temp);
	temp = NULL;
	head->text.len--;
}

void compareInsertSort(linkList* head,int num)
{
	linkList* temp = (linkList*)malloc(sizeof(linkList));
	temp->text.data = num;
	temp->next = NULL;

	linkList* p = head;
	while(p->next != NULL)
	{
	if(p->next->text.data > temp->text.data)
		break;
	else
		{
			p = p->next;
		}
	}
	temp->next = p->next;
	p->next = temp;
	head->text.len++;


}

头文件:

#ifndef __LINKLIST_H__
#define __LINKLIST_H__
union msg{
	int data;
	int len;

};
typedef struct node
{
	union msg text;
	struct node* next;
}linkList;
linkList* create_linkList();
int insert(linkList* head,int num);   
void showlinklist(linkList* head); 
 int insertTail(linkList* head,int num);
void deleteHead(linkList* head); 
void deleteTail(linkList* head);
void insertByPos(linkList* head,int pos,int num);
void deleteByPos(linkList* head,int pos);
void compareInsertSort(linkList* head,int num);

#endif

在这里插入图片描述
在这里插入图片描述

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
链表实现直接插入排序是一种常用的排序算法。它可以通过修改链表中的指针来给出排序结果,而不需要移动元素。具体实现步骤如下: 1. 创建一个头结点,作为新链表的起点,并将原链表的第一个结点作为已排序的部分。 2. 从原链表中取下一个结点,将其插入到已排序的链表中的正确位置,保持链表的有序性。 3. 重复步骤2,直到所有结点都被插入到已排序的链表中。 具体的代码实现可以参考引用中给出的代码示例,其中使用了头结点和两个指针(p和q)来实现链表的插入操作。在每次插入结点后,可以通过输出链表的值来验证排序的进程。 需要注意的是,链表实现的直接插入排序算法不改变原链表中元素的位置,而是在链表中给出其在排序表中的位置。这种算法适用于对链表进行排序的场景。 总结起来,链表实现直接插入排序的步骤包括: 1. 创建一个头结点,并将原链表的第一个结点作为已排序的部分。 2. 从原链表中取下一个结点,并将其插入到已排序的链表中的正确位置。 3. 重复步骤2,直到所有结点都被插入到已排序的链表中。 这样就可以利用链表实现直接插入排序算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于双链表直接插入排序、直接选择排序、冒泡排序](https://download.csdn.net/download/m0_62171658/86731089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [直接插入排序算法之表插入排序详解](https://blog.csdn.net/sunnyoldman001/article/details/127080111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [链表直接插入排序](https://blog.csdn.net/qq_41027398/article/details/122275622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值