C语言之单链表的使用
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
void GetElem_L(LinkList L,int i,int e){
//L为带头结点的单链表的头指针。
//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
LNode *p = L->next;int j = ;
while(p&&j<i){
p = p->next;++j;
}
e = p->data;
printf("获取的值:%d\n",e);
}//GetElem_L
void ListInsert_L(LinkList L,int i,int e){
//在带头节点的单链线性表L中第i个人位置之前插入元素e
LinkList p = L; int j=;
while(p&&j<i-){p=p->next;++j;} //寻找第i-1个节点。
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = e;s->next = p->next;
p->next = s;
printf("插入成功。");
}//ListInsert_L
int ListDelete_L(LinkList L,int i,int e)
{
LinkList p = L;int j = ;
while(p->next&&j<i-){//寻找第i个节点并令p指向其前趋
p = p->next; ++j;
}
LNode *q = p->next; p->next = q->next;
e = q->data; free(q);
return e;
}//ListDelete_L
void CreateList_L(LinkList *L,int n){
(*L) = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL; //建立一个带头结点的单链表
for(int i = n;i>;--i){
LinkList p = (LinkList)malloc(sizeof(LNode)); //生成新的结点
scanf("%d",&p->data);
p->next = (*L)->next; (*L)->next = p;
}
printf("表格创建成功");
}//CreateList_L
void MergeList_L(LinkList La,LinkList Lb,LinkList Lc){
//已知单链线性表La和Lb的元素按值非递减排列。
//归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。
LNode *pa = La->next; LNode *pb = pb->next;
LNode *pc = Lc->next;
Lc = pc = La;
while(pa && pb){
if(pa->data <= pb->data){
pc->next = pa;pc = pa;pa = pa->next;
}
else{pc->next = pb;pc = pb;pb = pb->next;}
}
pc->next = pa ? pa:pb; //插入剩余段。
free(Lb);
}//MergeList_L
void main()
{
LinkList L;
int n;
printf("请输入数据的数量:\n");
scanf("%d",&n);
CreateList_L(&L,n);
printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");
int i;
scanf("%d",&i);
int g=;
while(g==)
{
if(i==){
int e;
printf("请输入你们要插入的元素:\n");
scanf("%d",&e);
printf("请输入你想要插入的位置:\n");
int k;
scanf("%d",&k);
ListInsert_L(L,k,e);
printf("请选择你是否要退出还是继续:1为继续;2为退出\n");
g=;
scanf("%d",&g);
printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");
i=;
scanf("%d",&i);
}
if(i==){
int e;
printf("请输入你想要获取元素的位置:\n");
int k;
scanf("%d",&k);
GetElem_L(L,k,e);
printf("请选择你是否要退出还是继续:1为继续;2为退出\n");
g=;
scanf("%d", &g);
printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");
i=;
scanf("%d", &i);
}
if(i==){
int e;
printf("请输入你想要删除的位置:\n");
int k;
scanf("%d",&k);
ListDelete_L(L,k,e);
printf("请选择你是否要退出还是继续:1为继续;2为退出\n");
g=;
scanf("%d", &g);
printf("请选择你想要进行的操作:1代表插入元素;2代表获得元素;3代表删除元素;\n");
i=;
scanf("%d", &i);
} }
return ;
}
C语言之单链表的使用的更多相关文章
- C语言实现单链表-03版
在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...
- C语言实现单链表-02版
我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...
- C语言实现单链表,并完成链表常用API函数
C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). ...
- C语言实现单链表节点的删除(带头结点)
我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...
- C/C++语言实现单链表(带头结点)
彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按 ...
- 「C语言」单链表/双向链表的建立/遍历/插入/删除
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- 一起talk C栗子吧(第十二回:C语言实例--单链表一)
各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例.闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们,上一回中咱们没有说详细的样例,并且是说了样例中的文 ...
- C语言实现单链表(不带头结点)节点的插入
对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://gith ...
- C语言实现单链表(带头节点)
C语言在实现单链表存储时需要注意的几点: 1.定义结构体,typedef:用于给结构体另命名 // 定义结构体类型 typedef struct Node{ int data; struct Node ...
- C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...
随机推荐
- webpack wepack-dev-server 对应版本
webpack wepack-dev-server 对应版本 事情起因是使用 extract-text-webpack-plugin 对 css 和 js 打包进出现 Tapable.plugin i ...
- bzoj 2632 [neerc2011]Gcd guessing game——贪心(存疑)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2632 官方题解:http://neerc.ifmo.ru/archive/2011/neer ...
- 西南大学网络实现路由器WIFI共享方案(一号多用户共享)
背景: 学校更换网页认证,限制多台设备的登录,后台记录发现会将账号封30min禁止登陆,于是想办法冲破这个限制.看到马丁大神的博客知道了学校的检测机制,只需要定时对账号进行认证下线即可实现,不被学校检 ...
- SublimeText3搭建go语言开发环境(windows)
SublimeText3搭建go语言开发环境(windows) 下载并解压: Sublime Text Build 3021.zip注册: 尽量不要去破解 安装Package C ...
- 【经验】实现STL算法时遇到的模板编译错误问题
在实现set_union算法时调用了自己写的copy算法,出现了以下问题. Error 1 error C2665: 'xyz_stl::__copy' : none of the 2 overloa ...
- mstsc遇到CredSSP加密Oracle修正
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\P ...
- bzoj4336: BJOI2015 骑士的旅行
Description 在一片古老的土地上,有一个繁荣的文明. 这片大地几乎被森林覆盖,有N座城坐落其中.巧合的是,这N座城由恰好N-1条双 向道路连接起来,使得任意两座城都是连通的.也就是说,这些城 ...
- java代码------------条件运算符 ?:
总结: package com.sads; //?: //这个运算符是条件运算符 //条件式?值:值 public class Sd { public static void main(String[ ...
- 二、Spark在Windows下的环境搭建
由于Spark是用Scala来写的,所以Spark对Scala肯定是原生态支持的,因此这里以Scala为主来介绍Spark环境的搭建,主要包括四个步骤,分别是:JDK的安装,Scala的安装,Spar ...
- NFV网络功能虚拟化 基本概念
NFV基本概念 NFV则由运营商联盟提出,为了加速部署新的网络服务,运营商倾向于放弃笨重昂贵的专用网络设备,转而使用标准的IT虚拟化技术来拆分网络功能模块,如DNS.NAT.Firewall等.于是一 ...