2_单链表基本操作
来源:互联网 发布:c语言中eof怎么输入 编辑:程序博客网 时间:2024/06/12 23:31
/****date:2014.12.07*****/
{
char key[10]; //关键字
char name[20];
int age;
}Data; //定义节点类型
typedef struct Node //定义链表数据结构
{
Data nodeData;
struct Node * nextNode;
CLType * CLAddEnd(CLType * head,Data nodeData)
{
CLType * node,* htemp;
if (!(node=(CLType*)malloc(sizeof(CLType))))
{
printf("申请内存失败\n");
return NULL;
}
else
{
node->nodeData=nodeData;
node->nextNode=NULL;
if (head==NULL)
{
head=node;
return head;
}
htemp=head;
while (htemp->nextNode!=NULL)
{
htemp=htemp->nextNode;
}
htemp->nextNode=node;
return head;
}
CLType * CLAddFirst(CLType * head,Data nodeData)
{
CLType * node;
if (!(node=(CLType *)malloc(sizeof(CLType))))
{
printf("申请内存失败\n");
return NULL;
}
else
{
node->nodeData=nodeData;
node->nextNode=head;
head=node;
return head;
}
CLType * CLFindNode(CLType * head,char * key)
{
CLType * htemp;
htemp = head;
while (htemp)
{
if (strcmp(htemp->nodeData.key,key)==0)
{
return htemp;
}
htemp=htemp->nextNode;
}
return NULL;
CLType * CLInsertNode(CLType * head,char * findkey,Data nodeData)
{
CLType * node,* nodetemp;
if (!(node=(CLType *)malloc(sizeof(CLType))))
{
printf("申请内存失败\n");
return 0;
}
node->nodeData=nodeData;
nodetemp=CLFindNode(head,findkey);
if (nodetemp)
{
node->nextNode=nodetemp->nextNode;
nodetemp->nextNode=node;
}
else
{
printf("未找到正确的插入位置\n");
free(node);
}
return head;
int CLDeleteNode(CLType *head,char * key)
{
CLType * node,* htemp; // node保存删除节点的前一节点
htemp=head;
node=head;
while (htemp)
{
if (strcmp(htemp->nodeData.key,key)==0)
{
node->nextNode=htemp->nextNode;
free(htemp);
return 1;
}
else
{
node=htemp;
htemp=htemp->nextNode;
}
}
return 0;
int CLLength(CLType *head)
{
CLType * htemp;
int len=0;
htemp=head;
while (htemp)
{
len++;
htemp=htemp->nextNode;
}
return len;
void CLAllNode(CLType *head)
{
CLType * htemp;
Data nodeData;
htemp=head;
printf("当前链表共有 %d 个节点,链表所有数据如下:\n",CLLength(head));
while (htemp)
{
nodeData=htemp->nodeData;
printf("节点 (%s %s %d)\n",nodeData.key,nodeData.name,nodeData.age);
htemp=htemp->nextNode;
}
}
/***单链表节本操作***/
单链表:是物理存储单元非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。由一系列结点(链表中每一个元素称为结点)组成,结点可以动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
typedef struct{
char key[10]; //关键字
char name[20];
int age;
}Data; //定义节点类型
typedef struct Node //定义链表数据结构
{
Data nodeData;
struct Node * nextNode;
}CLType;
CLType * CLAddEnd(CLType * head,Data nodeData)
{
CLType * node,* htemp;
if (!(node=(CLType*)malloc(sizeof(CLType))))
{
printf("申请内存失败\n");
return NULL;
}
else
{
node->nodeData=nodeData;
node->nextNode=NULL;
if (head==NULL)
{
head=node;
return head;
}
htemp=head;
while (htemp->nextNode!=NULL)
{
htemp=htemp->nextNode;
}
htemp->nextNode=node;
return head;
}
}
CLType * CLAddFirst(CLType * head,Data nodeData)
{
CLType * node;
if (!(node=(CLType *)malloc(sizeof(CLType))))
{
printf("申请内存失败\n");
return NULL;
}
else
{
node->nodeData=nodeData;
node->nextNode=head;
head=node;
return head;
}
}
CLType * CLFindNode(CLType * head,char * key)
{
CLType * htemp;
htemp = head;
while (htemp)
{
if (strcmp(htemp->nodeData.key,key)==0)
{
return htemp;
}
htemp=htemp->nextNode;
}
return NULL;
}
CLType * CLInsertNode(CLType * head,char * findkey,Data nodeData)
{
CLType * node,* nodetemp;
if (!(node=(CLType *)malloc(sizeof(CLType))))
{
printf("申请内存失败\n");
return 0;
}
node->nodeData=nodeData;
nodetemp=CLFindNode(head,findkey);
if (nodetemp)
{
node->nextNode=nodetemp->nextNode;
nodetemp->nextNode=node;
}
else
{
printf("未找到正确的插入位置\n");
free(node);
}
return head;
}
int CLDeleteNode(CLType *head,char * key)
{
CLType * node,* htemp; // node保存删除节点的前一节点
htemp=head;
node=head;
while (htemp)
{
if (strcmp(htemp->nodeData.key,key)==0)
{
node->nextNode=htemp->nextNode;
free(htemp);
return 1;
}
else
{
node=htemp;
htemp=htemp->nextNode;
}
}
return 0;
}
int CLLength(CLType *head)
{
CLType * htemp;
int len=0;
htemp=head;
while (htemp)
{
len++;
htemp=htemp->nextNode;
}
return len;
}
void CLAllNode(CLType *head)
{
CLType * htemp;
Data nodeData;
htemp=head;
printf("当前链表共有 %d 个节点,链表所有数据如下:\n",CLLength(head));
while (htemp)
{
nodeData=htemp->nodeData;
printf("节点 (%s %s %d)\n",nodeData.key,nodeData.name,nodeData.age);
htemp=htemp->nextNode;
}
}
0 0
- 2_单链表基本操作
- Oracle基本操作_Ⅰ
- 哈希表简介_基本操作
- 数据结构_线性表_链式存储_单链表 的基本操作
- 单链表的基本操作_创建、查询、插入、删除
- MySql的基本用法(2)_常见的数据库操作
- 单链表基本操作(2)
- 第2章_基本数据类型和基本操作_编程练习Exercise2.11通过控制台进行大小写的切换
- 三:数组_数组的基本操作
- 线性表_顺序存储/基本操作
- 线段树(一) _概述 基本操作
- Git-01_安装与基本操作
- 1_顺序表基本操作
- 3_顺序栈的基本操作
- Vector c++ 的基本操作 矢量 *_* !
- Objective-c语言_文件基本操作
- git学习(1)_基本操作
- Python基本语法_文件操作_读写函数详解
- 什么是仿射变换以及仿射变换矩阵?
- HDOJ 1231 ---最大连续字段和
- I2C学习之 STC15F204EA---GPIO端口模拟--简单控制PCF8574AT
- Foundation框架基础 NSFileManager-文件管理器
- ContentProvider初步学习
- 2_单链表基本操作
- OC学习之 类和对象
- 压缩感知的常见稀疏基名称及离散傅里叶变换基
- 迪科斯彻算法(Dijkstra)的一个java实现(有向图)
- MyEclipse6.5快捷键配置
- OC -----命名、弱语法、编译器特性
- JSP内置对象:request对象,response对象、请求重定向、请求转发
- linux命令——bash shell 配置
- 为android-21解析数据失败