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. $compile

    <html ng-app="compile"> <head> <script src="http://apps.bdimg.com/libs ...

  2. Android studio 英文——中文 翻译插件

    TranslationPlugin 1.手动下载 TranslationPlugin ,在Android studio 中 2. 3. 4.选中文件,点击OK 5.设置快捷键 代号1 : 代号2 :

  3. php_zip 类

    <?php /** * Created by PhpStorm. * User: StarZhan * Date: 2016/5/24 * Time: 12:04 */class PHPZip{ ...

  4. 手机端页面自适应解决方案-rem布局

    rem布局 布局前插入原生js即可 (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationch ...

  5. Excel文件下载功能

    HtmlTextWriter:能够帮助我们快速生成html语句. 下载功能实现代码 protected void Button1_Click(object sender, EventArgs e) { ...

  6. Oracle

    # Oracle 客户端免安装配置 1.  oracle11g   http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1511607 ...

  7. 多对多关系<EntityFramework6.0>

    无负载建立多对多关联的模型 原文中是Modeling a Many-to-Many Relationship with No Payload,虽然这么翻译也有点不准确,但是可以说明其目的,如下图所示, ...

  8. Swift 圆角设置

    故事面板中设置圆角(storyboard) Key Path layer.borderWidth(边框宽度) layer.cornerRadius(圆角弧度) layer.borderColor(边框 ...

  9. swift 单独部署,开发

    部署环境 virtualBox Ubuntu 14.04 desktop OpenStack Swift (kilo) 说明 此文档为基于官方修改的只针对Ubuntu 14.04,完整的参阅官方文档 ...

  10. WebGL与three.js

    前面学习了一些webgl的基础知识,现在就用一下three.js写一个小例子,记录一下学习的过程. 效果图: 1.去github下载three.js,然后将它加载到网页中 <script src ...