C代码实现非循环单链表

时间:2022-09-27 21:54:24

C代码实现非循环单链表,

直接上代码。

 # include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
//C代码实现非循环单链表 //定义链表结点
typedef struct Node{
int data;//数据域
struct Node* pNext;//指针域
}* PNODE,NODE; //函数声明
PNODE initHead(void);
void init(PNODE pHead) ;
bool isEmpty(PNODE pHead);
void traverse(PNODE pHead);
int length(PNODE pHead) ;
bool insert(PNODE pHead,int pos,int num);
bool delete_linked(PNODE pHead,int pos); int main(void)
{
//确定一个非循环链表只需要一个头结点
PNODE pHead;
//初始化头结点
pHead = initHead();
//给链表赋值
init(pHead);
//遍历
traverse(pHead) ;
printf("\n");
printf("链表的结点为%d个\n",length(pHead));
// insert(pHead,3,99);
delete_linked(pHead,);
traverse(pHead) ;
return ;
} //向链表中某个位置增加一个结点 pos>=1
bool insert(PNODE pHead,int pos,int num)
{
int i = ;
PNODE tem = pHead;
//让tem指向第POS-1个节点
while(NULL!=tem&&i<pos-) {
tem = tem->pNext;
i++;
}
if(i>pos-||NULL==tem){
return false;
}
//分配一个新的结点
PNODE pNode = (PNODE)malloc(sizeof(NODE));
if(NULL==pNode){
printf("动态分配内存失败!\n");
exit(-);
}
pNode->data = num;
//第一种方式
// pNode->pNext = tem->pNext;
// tem->pNext = pNode;
// 第二种方式
PNODE p = tem->pNext;
tem->pNext = pNode;
pNode->pNext = p;
return true;
} //删除指定位置的值
bool delete_linked(PNODE pHead,int pos)
{
int i = ;
PNODE tem = pHead;
//让tem指向第POS-1个节点
while(NULL!=tem&&i<pos-) {
tem = tem->pNext;
i++;
}
if(i>pos-||NULL==tem){
return false;
}
PNODE p = tem->pNext;
tem->pNext = p->pNext;
free(p);
return true;
} //链表长度
int length(PNODE pHead)
{
int count = ;
PNODE tem = pHead->pNext;
while(NULL!=tem){
count++;
tem = tem->pNext;
}
return count;
} //初始化头结点
PNODE initHead(void)
{
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if(NULL==pHead){
printf("申请内存失败\n");
exit(-);
}
return pHead;
} //给链表赋值
void init(PNODE pHead)
{
int num;//结点的值
int len;//结点的个数
printf("请输入结点的个数len= ");
scanf("%d",&len);
int i;
PNODE tem = pHead;
for(i = ;i<len;i++){
PNODE node = (PNODE)malloc(sizeof(NODE));
if(NULL==node){
printf("申请内存失败\n");
exit(-);
}
printf("请输入第%d个节点的值 ",i+);
scanf("%d",&num);
node->data = num;
tem->pNext = node;
node->pNext = NULL;
tem = node;
}
} //判断链表是否为空
bool isEmpty(PNODE pHead)
{
return (NULL==pHead->pNext);
} //遍历链表
void traverse(PNODE pHead)
{
if(isEmpty(pHead)){
printf("链表为空\n");
return;
}
PNODE tem = pHead->pNext;
while(NULL!=tem){
printf("%d ",tem->data);
tem = tem->pNext;
}
}

C代码实现非循环单链表的更多相关文章

  1. 简单约瑟夫环的循环单链表实现&lpar;C&plus;&plus;&rpar;

    刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...

  2. PTA 循环单链表区间删除 (15 分)

    本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...

  3. C语言版本:循环单链表的实现

    SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...

  4. c语言循环单链表

    /************************************************************************* > File Name: singleLin ...

  5. c语言有头循环单链表

    /************************************************************************* > File Name: singleLin ...

  6. 【c&plus;&plus;版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...

  7. 带头结点的循环单链表----------C语言

    /***************************************************** Author:Simon_Kly Version:0.1 Date: 20170520 D ...

  8. 循环单链表定义初始化及创建(C语言)

    #include <stdio.h> #include <stdlib.h> /** * 含头节点循环单链表定义,初始化 及创建 */ #define OK 1; #defin ...

  9. C&plus;&plus;循环单链表删除连续相邻重复值

    比如:1(头)->2->2->3->3->1->1(头) 去除以后的结果是1->2->3,注意头尾的1也要去掉一个. #include "st ...

随机推荐

  1. DPI

    [iOS]查找数组NSArray中是否包含指定的元素 http://blog.csdn.net/zyq527758142/article/details/51278172 Dpi(每平方英寸像素数目) ...

  2. 用dygraphs图表分析xdebug的trace结果

    2015年12月1日 19:44:23 推荐这一篇用百度的ECharts图表工具 本文用到的js图表库: dygraphs 注: 测试数据量 19108个数据点, 最好将数据的量级调小, 这样渲染会很 ...

  3. Css 特殊或不常用属性

    1. -webkit-font-smoothing: antialiased; CSS3中用于webkit引擎(如chrome)中设置字体的抗锯齿或者说光滑度的属性.有3个属性:none用于小像素的文 ...

  4. android 通过帧动画方式播放Gif动画

    注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...

  5. Virtualbox虚拟机安装CentOS6&period;5图文详细教程&lpar;zhuan&rpar;

    http://www.2cto.com/os/201407/318477.html ************************************************* 什么是Virtu ...

  6. 数据库中的T-sql语句 条件修改 高级查询

    1.创建数据库:create database --数据库名,不能中文,不能数字开头,不能符号开头 2.删除数据库:drop database-- 数据库名 use student--使用数据库 3. ...

  7. 工程造价数据服务云平台(造价BIM)

    为响应招标人的<ZQH工程造价数据平台>的技术邀约,特作以下陈述. 经过多次沟通和对招标文件的理解,招标人通过软件平台建立和使用人员库.项目库.材料设备价格库.数据库等四库的真实需求,本着 ...

  8. C&num;线程同步(4)- 通知&EventWaitHandle一家

    文章原始出处 http://xxinside.blogbus.com/logs/47523285.html 预备知识:C#线程同步(1)- 临界区&Lock,C#线程同步(2)- 临界区&am ...

  9. codeforces387B

    George and Round CodeForces - 387B George decided to prepare a Codesecrof round, so he has prepared  ...

  10. MAC洪水攻击

    MAC洪水攻击原理 传统的交换机在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关的目的MAC对应的条目,此数据帧将作为广播帧来处理,CAM表的容量有限,只能存储不 ...