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. 简单约瑟夫环的循环单链表实现(C++)

    刚刚接触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++版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: 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语言实现循环单链表

    //初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); head->next=NULL; head->data=-1; ...

随机推荐

  1. Java 基础高级2 网络编程

    1.协议的概念:通信双方事先约定好的通信规则 2七层网络通信协议:应用成,表示层,会话层,传输层,网络层,数据链路层 3.TCP/IP协议:点对点通信,三层握手,安全有保证 4.UDP协议;广播协议, ...

  2. h5手机页面禁止缩放

    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable= ...

  3. MVC -- 后台RedirectToAction传递实体类与字符串

    1.MVC -- 后台RedirectToAction传递实体类 RedirectToAction(控制器,控制器方法,实体类) 2.MVC -- 后台RedirectToAction传递字符串 Re ...

  4. centos7.0 安装redis集群

    生产环境下redis基本上都是用的集群,毕竟单机版随时都可能挂掉,风险太大.这里我就来搭建一个基本的redis集群,功能够用但是还需要完善,当然如果有钱可以去阿里云买云数据库Redis版的,那个还是很 ...

  5. python之路:Day01 --- Python基础1

    本节内容 1.Python介绍 2.发展史 3.变量 4.用户输入 5.表达式 if...else语句 6.表达式 for 循环 7.表达式 while 循环 8.模块初识 9.数据类型初识 10.数 ...

  6. 解决select2在bootstrap的modal中默认不显示的问题

    在Bootstrap中的Modal,select2插件会有不显示,因为其z-index小于modal,还有另外一个问题是,修正z-index之后,select2不会自动失去焦点的问题.代码解决如下: ...

  7. Centos 下编译安装Redis

    安装环境说明: 操作系统:Centos 6.5 -64bit 安装路径:/usr/local/redis 开始编译redis tar -zxvf redis-2.8.19.tar.gz cd redi ...

  8. IT 网址

    蒋金楠 (Artech)            WCF ,asp.net等          博客地址:http://www.cnblogs.com/artech/tag/WCF/ 伍华聪       ...

  9. 为什么说在使用多条件判断时switch case语句比if语句效率高?

    在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...

  10. Python-面向对象(类)二

    一.成员修饰符 • 共有成员 • 私有成员 __+字段 __:成员修饰符 无法直接访问,只能通过该成员所属类的方法简介访问 class Foo: def __init__(self, name, ag ...