当前位置: 首页 > article >正文

2024.2.3

单向循环链表的头插 头删 尾插和尾删

//头结点插入
Linklist insere_element(Linklist head,datatype element)
{
	Linklist s=creat();
	s->data=element;
	if(NULL==head)
	{
		head=s;
	}
	else
	{
		Linklist p=head;
		while(p->next!=head)
		{
			p=p->next;
		}
		s->next=head;
		head=s;
		p->next=head;
	}
	return head;
}
/头删
Linklist head_del(Linklist head)
{
	if(NULL==head)
		return head;
	Linklist del=head;
	head=head->next;
	free(del);
	del=NULL;
	return head;
}

//尾插法
Linklist insert_rear(Linklist head,datatype element)
{
	//先创建一个结点
	Linklist s=creat();
	s->data=element;
	//判断是否为空
	if(head==NULL)
	{
		head=s;
	}
	else
	//有多个节点的情况
	{
		Linklist p=head;//防止返回的时候出错,定义p为head,否则head改变后返回是错误的
		//找到最后一个结点
		while(p->next)
		{
			p=p->next;
		}
		p->next=s;
	}
	return head;
}
//尾删
Linklist rear_del(Linklist head)
{
	Linklist del=NULL;
	if(NULL==head)
		return head;
	else if(head->next==NULL)
	{
		free(head);
		head==NULL;
	}
	else
	{
		del=head;
		while(del->next->next)
		{
			del=del->next;
		}
		free(del->next);
		del->next=NULL;
	}
	return head;
}

约瑟夫环

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum
{
	FALSE=-1,
	SUCCESS
};
typedef int datatype;
typedef struct Node
{
	datatype data;
	struct Node *next;
}*linklist;
linklist creat();
linklist insert_rear(linklist head,datatype element);
void output(linklist head);
linklist Joseph(linklist head,int n,int m);
linklist Joseph(linklist head,int n,int m)
{
	if(head==NULL)
		return head;
	linklist p=head;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m-2;j++)
		{
			p=p->next;
		}
		linklist del=p->next;
		printf("%-5d",del->data);
		p->next=del->next;
		free(del);
		del=NULL;
		p=p->next;
	}
	return NULL;
}
int main(int argc, const char *argv[])
{
	//定义头指针
	linklist head=NULL;
	int n;
	datatype element;
	printf("please enter n:");
	scanf("%d",&n);
	//循环写入
	for(int i=0;i<n;i++)
	{
		printf("please enter element:");
		scanf("%d",&element);
		head=insert_rear(head,element);
	}
	//遍历
	output(head);
    //约瑟夫环
	int m;
	printf("please enter m:");
	scanf("%d",&m);
	head=Joseph(head,n,m);
	return 0;
}


http://www.kler.cn/a/227296.html

相关文章:

  • SparkStreaming---入门
  • 深搜问题:猴群
  • Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】
  • 计算机网络_1.6.1 常见的三种计算机网络体系结构
  • mysql 删除分区表数据
  • 17.Golang channel的基本定义及使用
  • linux中如何输入控制字符
  • Codeforces Round 891 (Div. 3)补题
  • 聊聊比特币----比特币地址
  • [C语言]结构体初识
  • 如何使用 Google 搜索引擎保姆级教程(附链接)
  • Vite 的全景:颠覆前端开发的新潮流
  • Java自救手册
  • 后端登录校验
  • 前端工程化之:webpack3-1(css工程化概述)
  • 常用git指令
  • 智慧未来已至:人工智能与数字孪生共筑城市新纪元
  • 如何使用 FOFA 搜索引擎保姆级教程(附链接)
  • 探秘Java 8 Lambda:简洁高效的集合操作
  • 通过手写简易版RPC理解RPC原理