2024.4.2作业

1、创建一个空的单向链表

2、头尾操作

3、1)头插法2)尾插法3)头删法4)尾删法

4、遍历

5、中间操作1)按位置插入2)按位置删除3)

6、按位置查找数据

7、直接插入排序

#ifndef __LINK__H                                                     
#define __LINK__H                                                     
                                                                      
typedef int datatype;                                                 
typedef  struct linkList{                                             
    union {                                                           
        datatype lk_data;                                             
        int len;                                                      
    }data;                                                            
    struct linkList* next;                                            
}linkList;                                                            
                                                                      
linkList * creat_Head_lkList(void);                                   
void Head_insert_likList(linkList* head,datatype num);                
void show_linkList(linkList *head);                                   
void Head_Delete_linkList(linkList *head);                            
void TailDelete_linkList(linkList *head);                             
void insert_linkListByIndex(linkList*head,int index,datatype num);    
void delete_linkListByIndex(linkList*head,int index);                 
datatype  search_linkList_byIndex(linkList* head,int index);          
void  SmallToLarge_linkList(linkList*head,datatype num);              
                                                                      
                                                                      
#endif                                                                
 #include <stdlib.h>                                                                
 #include <stdio.h>                                                                 
 #include "./3_link.h"                                                              
                                                                                    
 int main(int argc, const char *argv[])                                             
 {                                                                                  
                                                                                    
     linkList * head=creat_Head_lkList();                                           
     printf("head=%p\tlen=%d\tnext=%p\n",head,head->data.len,head->next);           
     /*                                                                             
     Head_insert_likList(head,18);                                                  
     Head_insert_likList(head,28);                                                  
     Head_insert_likList(head,38);                                                  
     Head_insert_likList(head,48);                                                  
     Head_insert_likList(head,58);                                                  
     show_linkList(head);                                                           
     Head_Delete_linkList(head);                                                    
     show_linkList(head);                                                           
     TailDelete_linkList(head);                                                     
     show_linkList(head);                                                           
     insert_linkListByIndex(head,5,77);                                             
     show_linkList(head);                                                           
     insert_linkListByIndex(head,1,11);                                             
     show_linkList(head);                                                           
     insert_linkListByIndex(head,2,66);                                             
     show_linkList(head);                                                           
     delete_linkListByIndex(head,6);                                                
     show_linkList(head);                                                           
     delete_linkListByIndex(head,3);                                                
     show_linkList(head);                                                           
     search_linkList_byIndex(head,5);                                               
     search_linkList_byIndex(head,3);                                               
     */                                                                             
     SmallToLarge_linkList(head,1);                                                 
     SmallToLarge_linkList(head,1);                                                 
     SmallToLarge_linkList(head,2);                                                 
     SmallToLarge_linkList(head,4);                                                 
     SmallToLarge_linkList(head,5);                                                 
     SmallToLarge_linkList(head,6);                                                 
     SmallToLarge_linkList(head,7);                                                 
     SmallToLarge_linkList(head,8);                                                 
     show_linkList(head);                                                           
                                                                                    
     return 0;                                                                      
 }                                                                                  
                                                                                    
                                                                                    
/*
 * function:    //创建链表
 * @param [ in] 
 * @param [out] 
 * @return      
 */
#include <stdlib.h>
#include <stdio.h>
#include "./3_link.h"
linkList * creat_Head_lkList(void)
{
	linkList  *plist=(linkList*)malloc(sizeof(linkList));
	if(NULL==plist)
	{
		printf("malloc error\n");
		return NULL;
	}
	plist->data.len=0;
	plist->next=NULL;
	return plist;
}

/*
 * function:    //头插法
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void Head_insert_likList(linkList* head,datatype num)
{
	//创建链空间
	linkList  *plist=(linkList*)malloc(sizeof(linkList));
	if(NULL==plist)
	{
		printf("malloc error\n");
		return ;
	}
	//链体数据赋值
	plist->data.lk_data=num;
	//头链体指向插入体,插入体指向头体原来指向
	plist->next=head->next;
	head->next=plist;
	//len++
	head->data.len++;
	return;
}

/*
 * function:    //遍历链表
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void show_linkList(linkList *head)
{
	linkList* p=head;
	while(p->next!=NULL)
	{
		p=p->next;
		printf("%d\t",p->data.lk_data);
	}
	putchar(10);
	return;
}

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

void Head_Delete_linkList(linkList *head)
{
	//判断链表是否为空
	if(NULL==head->next)
	{
		printf("空链表,无法删除数据!\n");
		return;
	}
	linkList* p=head->next;
	head->next=head->next->next;
	free(p);
	p=NULL;
	head->data.len--;
	return;
}

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

void TailDelete_linkList(linkList *head)
{
	linkList *p=head;
	//判断链表是否为空
	if(NULL==head->next)
	{
		printf("空链表,无法删除数据!\n");
		return;
	}
	while(p->next->next!=NULL)
		p=p->next;
	free(p->next);
	p->next=NULL;
	head->data.len--;
	return;
}

/*
 * function:    //按位置插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void insert_linkListByIndex(linkList*head,int index,datatype num)
{
	linkList *p=head;
	//判断链表是否为空
	if(index>head->data.len||index<=0)
	{
		printf("插入位置超出链表,插入失败!\n");
		return ;
	}
	//找到插入位置
	for(int i=0;i<index-1;i++)
		p=p->next;
	//创建数据体
	linkList* temp=(linkList*)malloc(sizeof(linkList));
	temp->data.lk_data=num;
	temp->next=p->next;
	p->next=temp;
	//len++
	head->data.len++;
	return;
}




/*
 * function:    //按位置删除
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void delete_linkListByIndex(linkList*head,int index)
{
	linkList *p=head;
	//判断链表是否为空
	if(index>head->data.len||index<=0)
	{
		printf("位置超出链表,删除失败!\n");
		return ;
	}
	//找到插入位置
	for(int i=0;i<index-1;i++)
		p=p->next;
	//删除数据
	linkList*temp=p->next;
	p->next=p->next->next;
	free(temp);
	temp=NULL;
	//len--
	head->data.len--;

	return;
}



/*
 * function:    //按位置查找数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */
datatype  search_linkList_byIndex(linkList* head,int index)
{
	//判断位置是否合法
	if(index<=0||index>head->data.len)
	{
		printf("位置超出链表范围,查找失败!\n");

		return -1;
	}
	//循环找到位置
	linkList* p=head;
	for(int i=0;i<index;i++)
		p=p->next;
	//打印数据
	printf("位置%d的数据是%d\n",index,p->data.lk_data);
	//
	return p->data.lk_data;

}


/*
 * function:    //空链表,升序插入数据
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void  SmallToLarge_linkList(linkList*head,datatype num)
{
	linkList* p=head;
	//创建新数据体
	linkList * temp=(linkList*) malloc(sizeof(linkList));
	//找到插入位置
	for(int i=0;i<head->data.len;i++)
	{
		if(num>p->next->data.lk_data)
			p=p->next;
		else
			break;
	}
	//数据插入
	temp->data.lk_data=num;
	temp->next=p->next;
	p->next=temp;
	//len++
	head->data.len++;
	return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值