<数据结构>单链表基本功能实现

2023-11-05


前言

提示:本篇主要是本小白大学期间对数据结构实验的一些基本代码功能实现,希望对一同数据结构的伙伴有所帮助。


提示:以下是本篇文章正文内容,下面案例可供参考

一、单链表实验

【实验目的】

  1. 掌握单链表的存储结构形式及其描述
  2. 掌握单链表的建立、查找、插入和删除操作
    【实验内容】
  3. 编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。
  4. 编写函数,实现遍历单链表。
  5. 编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。
  6. 编写函数,实现在非递减有序链表中删除值为x的结点。
  7. 编写一个主函数,在主函数中设计一个简单的菜单,分别调用上述函数。

二、使用步骤

1.链表基本功能

如下(示例):

LinkList sort(LinkList head);	(排序函数)
LinkList creatlnode(LinkList head);(创建函数)
LinkList insertnode(LinkList head,LinkList new);(插入节点函数)
LinkList insertpred(LinkList head ,LinkList p);(头插入函数)
void show(LinkList head);(遍历函数)
LinkList deletenode(LinkList head, ElemType num);(输出函数)
void Title();(标题函数)

2.代码功能实现

代码如下(示例):

(二)单链表基本操作的实现

【实验提示与参考】
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ElemType int 

typedef  struct LNode
	{ElemType data;	 
 	 struct LNode *next;
	}LNode,*LinkList;

extern LinkList sort(LinkList head);	(排序函数)
extern LinkList creatlnode(LinkList head);(创建函数)
extern LinkList insertnode(LinkList head,LinkList new);(插入节点函数)
extern LinkList insertpred(LinkList head ,LinkList p);(头插入函数)
extern void show(LinkList head);(遍历函数)
extern LinkList deletenode(LinkList head, ElemType num);(输出函数)
extern void Title();(标题函数)
int main(void)
{
	char ch;
	int node;
	int funiction;
	LinkList head=NULL;
	LinkList new;
	Title();
	scanf("%d",&funiction);
	while(funiction ==1 ||funiction ==2 ||funiction==3)
	{
	switch (funiction)
	{
	//输入1:创建链表
	case 1:
		head = creatlnode(head);
		show(head);
		putchar('\n');
		break;
		//输入3:对链表进行顺序排序
	case 3:
		head =sort(head);
		show(head);
		putchar('\n');
		break;
		//输入2:进入判断删除|插入操作
	case 2:
		while(1)
		{
		//输入i|I:插入操作 输入D|d:删除操作
	    printf("insert:input(I||i)\ndelete:input(D||d)\n");
		scanf("%c",&ch);
		printf("please input that node:\n");
		scanf("%d",&node);
		switch (ch)
		{
		case 'd':
		case 'D':
		head=deletenode(head,node);
		show(head);//遍历
		break;
		case 'I':
		case 'i':
		new=(LinkList)malloc(sizeof(LNode));
		new->data =node;
		head= insertnode(head,new);
		show(head);
		printf("you inserted %d \n",new->data);
		break;
		default:return 0 ;
		}
		}
	}	
	Title();//标题
	scanf("%d",&funiction);
	putchar('\n');
	}
}
void Title()
{
	printf("\t\t--LNODE--\n");
	printf("\t\t-Choice:Funiction (case )\n");
	printf("\t\t1.CreatLnode\n");
	printf("\t\t2.Insert/Delete\n");
	printf("\t\t3.Sort\n");
}
LinkList creatlnode(LinkList head)//创建链表
{
	LinkList p;
	while(1)
	{
	p = (LinkList)malloc(sizeof(LNode));	
	printf("please input a num:\n");
	scanf("%d",&(p->data));
	if(p->data == 0)
		{
			printf("0 quit\n");(输入为 0returnfree(p);
			return head;
		}
	head = insertpred(head,p);
	}
}

LinkList insertpred(LinkList head ,LinkList p)//插入节点:头插法
{
	if(head ==NULL)
	{
		head = p;
	}
	else
	{
		p->next = head;
		head = p; 
	}
	return head;
}
LinkList insertnode(LinkList head ,LinkList new)//插入节点:后插法
{
	LinkList p;
	p=head;
	if(head->data <= new->data)
	{
		new->next = head;
		head = new;
		return head;
	}		
	while(p->next !=NULL)
	{
		if(p->next->data <= new->data)
		{
			new->next=p->next;
			p->next=new;	
			return head;
		}
		p=p->next;
	}
		p->next = new;
		return head;
}	
void show(LinkList head)//遍历链表
{
	LinkList p;
	p = head;
	while(p!= NULL)
	{

		printf("%d\t",p->data);
		p = p->next;
	}
}
LinkList deletenode(LinkList head,int num )//删除节点
{
	int temp;
	LinkList p;	
	p=head;
	while(p->next!=NULL)
	{
		if(head->data ==num)
		{
			head =head->next;
			return head ; 
		}
		if(p->next->data == num)
		{
			temp = p->next->data;
			p->next=p->next->next;
			printf("you deleted %d\n",temp);
			return head;
		}
		p = p->next;
	}
	/*if(p->next == NULL)
	{
		free(p);
		return head;
	}*/
	if(p->data != num)
	{
		printf("No Fonund this num\n");
		return head;
	}
}	
LinkList sort(LinkList head)	//排序操作
{
	LinkList p;
	LinkList h;
	int temp;
	p=head;
	h=head;
	while(h->next!=NULL)
	{
	p=h->next;
	while(p!=NULL)
	{
		if(p->data > h->data)
		{
			temp = h->data;
			h->data=p->data;
			p->data=temp;
		}
		p=p->next;
	}
		h=h->next;
	}
	return head ;
}

总结

实现链表主要就是要对指针的指向有明确概念,当然在不确定的情况下,可以通过反复调整来验证是否符合猜想,最后总结出规律。希望本篇对各位学习链表的小伙伴有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

<数据结构>单链表基本功能实现 的相关文章

随机推荐

  • 使用c++实现通讯录管理系统

    使用c 实现通讯录管理系统 系统中主要实现的功能如下 1 添加联系人 2 显示联系人 3 删除联系人 4 查找 5 修改 6 清空 7 退出通讯录 添加联系人 姓名 性别 年龄 联系电话 家庭住址 以下步骤 1 设计联系人结构体 2 设计通
  • C++ 内存共享/软件守护

    功能描述 在无人看守的情况下 防止软件意外退出 接口调用简单 只需要简单声明就行 int main int argc char argv QShareProcess shareProcess 共享内存名称随意 下面实现自己的主体代码即可 类
  • 用python把csv中的数据存入到mysql

    前言 第一次写博客 我也不知道怎么写 想写点东西 就随便写写 0 0 0 0 我在网上搜这个问题的解决办法 给出的答案感觉不是很理想 所以写这篇 随便作为开头 说明 数据 csv文件中 是通过python的faker库 和random随机生
  • C++实现希尔(shell)排序

    先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序 待整个序列中的记录 基本有序 时 再对全体记录进行依次直接插入排序 include
  • 大话设计模式—策略模式

    在策略模式 Strategy Pattern 中 一个类的行为或其算法可以在运行时更改 这种类型的设计模式属于行为型模式 大话设计模式中程杰老师给出的定义是这样的 策略模式 Strategy 定义了算法家族 分别封装起来 让它们之间可以互相
  • 用ATL写简单的ActiveX控件

    我正在做的项目需要用读卡器来读数据 由于系统是B S架构的 所以只能把读卡器的驱动封装成一个无界面的ActiveX控件 这样web页面中的js代码才能访问读卡器 其实做起来也挺简单的 我用的环境是VS2005 步骤如下 打开VS2005后
  • lua中json和table互转

    本文本摘自 GitHub rxi json lua A lightweight JSON library for Lua table转为json json encode 1 2 3 x 10 Returns 1 2 3 x 10 json转
  • python把dataframe回写到mysql和pg库

    def pyWriteToMysql data df db param table name try connect url mysql pymysql db param get username db param get password
  • ofstream和ifstream详细用法

    ofstream是从内存到硬盘 ifstream是从硬盘到内存 其实所谓的流缓冲就是内存空间 在C 中 有一个stream这个类 所有的I O都以这个 流 类为基础的 包括我们要认识的文件I O stream这个类有两个重要的运算符 1 插
  • 树04--从上往下打印二叉树

    树04 从上往下打印二叉树 jz22 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 从上往下打印出二叉树的每个节点 同层节点从左至右打印 测试用例 输入 5 4 3 2 1 输出 5 4 3 2 1 解析 参考答案 解析 从
  • 信息学奥赛一本通 1184:明明的随机数

    文章目录 1 排序 手动去重 2 排序 unique去重 3 利用桶的思想 题目链接 http ybt ssoier cn 8088 problem show php pid 1184 1 排序 手动去重 include
  • Linux下安装jdk

    1 检测是否安装了jdk 运行命令 java version 2 查看安装了哪些jdk 运行命令 rpm qa grep java 3 若有需要将其卸载 rpm e nodeps 卸载的包 例如 rpm e nodeps java 1 7
  • Java 的 VO类

    今天 遇到一个操作 要在页面上查看一些固定的信息 用到了VO类和 从内存中加载数据 下面说一下 VO类 首先 java有几种对象 PO VO DAO BO POJO 一 PO persistant object 持久对象 可以看成是与数据库
  • Xcode升级后出现 unable to create '/Users/XXX/Library/Developer/Xcode....'的错误

    今天把Xcode从3 6升到了4 2 但是运行原本没有错误的工程的时候发现出现了N多错误 类型大致如题目所示 解决方法 打开实用工具 shift command U 然后打开终端 输入 sudo chmod R 777 Users XXX
  • 在el-select多选框里面设置input搜索框并能实现搜索功能

    效果 1 当在输入框里面输入内容时就开始进行筛选 下拉框显示筛选之后的数据 2 当没有符合条件时 显示无数据 3 清空输入框里面的内容后 下拉框显示全部的数据 思路 1 通过给搜索框设置oninput事件 oninput 当input的va
  • 在jupyter notebook中安装R核心

    在jupyter notebook中安装R核心 1 从R官网安装R language https www r project org 点击Download下面的CRAN 找到China 中国镜像站 任意选择一个就好 这里推荐第一个清华镜像
  • java.io.IOException: Stream closed解决办法

    1 出现这个bug的大体逻辑代码如下 1 private static void findMovieId throws Exception 2 File resultFile new File C 2016 txt 3 4 OutputSt
  • RESTful 风格详解

    一 什么是Restful风格 1 1 概念 RESTFUL是一种网络应用程序的设计风格和开发方式 基于HTTP 可以使用 XML 格式定义或 JSON 格式定义 最常用的数据格式是JSON 由于JSON能直接被JavaScript读取 所以
  • 任务列表 php,Laravel入门教程实战:任务列表(基础版)

    1 介绍 该快速入门指南提供了Laravel框架的基本介绍 包含了数据库迁移 Eloquent ORM 路由 验证 视图 Blade模版等内容 如果你是Laravel框架或者PHP框架的新手 这将是一个很好的起点 如果你已经在使用Larav
  • <数据结构>单链表基本功能实现

    文章目录 前言 一 单链表实验 二 使用步骤 1 链表基本功能 2 代码功能实现 总结 前言 提示 本篇主要是本小白大学期间对数据结构实验的一些基本代码功能实现 希望对一同数据结构的伙伴有所帮助 提示 以下是本篇文章正文内容 下面案例可供参