C语言链表
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;
Node * pNext;
}NODE,* PNODE;
PNODE create_List();
void traverse_List(PNODE pHead);
bool is_empty(PNODE pHead);
int length_List(PNODE pHead);
bool insert_List(PNODE pHead,int position,int num);
bool delete_List(PNODE pHead,int position,int * num);
void sort_List(PNODE pHead);
int main()
{
int num;
PNODE pHead=NULL;
pHead=create_List();
traverse_List(pHead);
if(is_empty(pHead))
{
printf("链表为空\n");
}
printf("链表长度为%d\n",length_List(pHead));
sort_List(pHead);
printf("排序后:\n");
traverse_List(pHead);
insert_List(pHead,2,2);
printf("添加元素后:\n");
traverse_List(pHead);
delete_List(pHead,2,&num);
printf("删除值为%d的元素2后:\n",num);
traverse_List(pHead);
return 0;
}
PNODE create_List()
{
int len;
int val;
PNODE pHead=(PNODE)malloc(sizeof(NODE));
if(NULL==pHead)
{
printf("分配失败,程序终止\n");
exit(0);
}
PNODE pTail=pHead;
pTail->pNext=NULL;
printf("请输入要生成的节点个数:");
scanf("%d",&len);
for(int i=0;i<len;i++)
{
printf("请输入第%d个节点的值:",i+1);
scanf("%d",&val);
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(NULL==pNew)
{
printf("分配失败,程序终止\n");
exit(0);
}
pNew->data=val;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}
return pHead;
}
void traverse_List(PNODE pHead)
{
PNODE temp=pHead->pNext;
while(temp!=NULL)
{
printf("%d\n",temp->data);
temp=temp->pNext;
}
}
bool is_empty(PNODE pHead)
{
if(NULL==pHead->pNext)
{
return true;
}
else
{
return false;
}
}
int length_List(PNODE pHead)
{
int len=0;
PNODE temp=pHead->pNext;
while(temp)
{
len++;
temp=temp->pNext;
}
return len;
}
void sort_List(PNODE pHead)
{
PNODE p,q;
int i,j,temp;
int len=length_List(pHead);
for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext)
{
for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext)
{
if(q->data<p->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}
bool insert_List(PNODE pHead,int position,int num)
{
int i=0;
PNODE p=pHead;
while(NULL!=p&&i<position-1)
{
p=p->pNext;
i++;
}
if(i>position-i||NULL==p)
{
return false;
}
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(NULL==pNew)
{
printf("分配失败,程序终止\n");
exit(0);
}
pNew->data=num;
pNew->pNext=p->pNext;
p->pNext=pNew;
return true;
}
bool delete_List(PNODE pHead,int position,int * num)
{
int i=0;
PNODE p=pHead;
while(NULL!=p->pNext&&i<position-1)
{
p=p->pNext;
i++;
}
if(i>position-i||NULL==p->pNext)
{
return false;
}
PNODE q=p->pNext;
*num=q->data;
p->pNext=p->pNext->pNext;
free(q);
q=NULL;
return true;
}
C语言链表的更多相关文章
- C语言 链表
原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C语言链表结构体(学习笔记)
#include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...
- C语言链表实例--玩转链表
下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...
- c语言-链表VS数组
数组和链表的区别 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要 ...
- 再次复习数据结构:c语言链表的简单操作
最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少. 现在c指针感觉知道点了,也就匆忙开展数据结 ...
- [数据结构]C语言链表实现
我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们 ...
- [C语言]链表实现贪吃蛇及部分模块优化
在继上篇[C语言]贪吃蛇_结构数组实现大半年后,链表实现的版本也终于出炉了.两篇隔了这么久除了是懒癌晚期的原因外,对整个游戏流程的改进,模块的精简也花了一些时间(都是借口). 优化模块的前沿链接: · ...
- 玩转C语言链表-链表各类操作详解
链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个"头指针"变量,以head表示,它存放一个地址.该地址指向一个元素 ...
随机推荐
- scp指令的学习
http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html scp是linux中功能最强大的文件传输命令,可以实现从本地到远程以及远程到 ...
- Web开发——Tomcat的配置
1.选择Tomcat 1.Apache官网http://apache.org/ 2.Tomcat官网http://tomcat.apache.org/ 3.Tomcat下载地址http://tomca ...
- CUBRID学习笔记 8 复制数据库
1 export database 类似sqlserver的分离数据库 cubrid unloaddb demodb分离后生成三个文件 demodb_objects, demodb_indexe ...
- hdu 1116 Play on Words 欧拉路径+并查集
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Backbone简介
backbone-------一个实现了web前端MVC模式的JS库-------官方地址 backbone库要建立在underscore库的基础上---------------官方中文地址----- ...
- JS 拼装代码的HTML onClick方法传递字符串
有时会在JS中拼装HTML代码,这时在HTML中出现的onClick()方法中: 1.出现传递Num型的数据,直接拼装进去即可: 2.可能会出现传递字符串的情况,处理方法比较特殊,如下: a:直接字符 ...
- Win7_SendTo文件夹
Win7系统浮动sendto目录现在被移到了这里 : %APPDATA%\Microsoft\Windows\SendTo %APPDATA%是个环境变量,具体来说是在这里: C:\users\??? ...
- [转载] Google数据中心网络技术漫谈
原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...
- oracle dba 职责, 及个人需要掌握内容
ORACLE DBA 职责, 基本相当于日常工作. 0. 数据库设计 1. 模式对象的创建与管理(table, index 等等) 2. 事物管理, 例如并发等 3. SQL 调优 只是针对SQL的 ...
- gcc常用指令及相关知识
1,gcc与g++的问题: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为是c++程序. 2.编译阶段,g++会调用gcc,对于c++代码,两者是等 ...