数据结构-实现链表
2011-11-08 13:36
471 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
若爱,请深爱;若弃,请彻底。不要暧昧,伤人伤己
(1)不应该牺牲程序的可读性
*/
/*
(1)pTail->next = pNew; //新构造的结点挂到指定结点
(2)append_list()函数中:对p->next判空
(3)注意尾结点指针域设置为NULL
*/
//定义数据类型,并为其分配内存
#define NODE_LEN sizeof(NODE)
typedef struct Node
{
float value;
struct Node * next;
}* PNODE, NODE;
PNODE create_list(); //构造一个指定长度的链表
void traverse_list(PNODE pHead); //遍历链表
bool append_list(PNODE pHead, float value); //追加结点值
bool insert_list(PNODE pHead, int pos, float value); //指定位置插入结点值
int main(void)
{
PNODE pHead = NULL; //定义头指针
printf("pHead指针的内存空间长度:%d \n", sizeof(pHead));
pHead = create_list();
traverse_list(pHead);
append_list(pHead, 100);
traverse_list(pHead);
insert_list(pHead, 2, 80);
traverse_list(pHead);
append_list(pHead, 100);
traverse_list(pHead);
return 0;
}
PNODE create_list()
{
int len; //链表的长度
float value; //临时节点值
printf("请输入链表的长度:");
scanf("%d", &len);
PNODE pHead = (PNODE)malloc(NODE_LEN); //分配一个不存放有效数据的头结点
//判空
PNODE pTail = pHead;
for(int i = 0; i < len; i++)
{
printf("请输入当前节点的值:");
scanf("%f", &value);
PNODE pNew = (PNODE)malloc(NODE_LEN);
//判空
pNew->value = value;
pTail->next = pNew; //新构造的结点挂到
pNew->next = NULL;
pTail = pNew; //新构造的结点转化为尾巴结点
}
return pHead;
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->next;
while(NULL != p)
{
printf("%f \t", p->value);
p = p->next;
}
printf("\n");
}
bool append_list(PNODE pHead, float value)
{
PNODE p = pHead->next;
while(NULL != p)
{
if(NULL == p->next)
{
break;
}
p = p->next; //此时p结点就是空节点
}
PNODE pNew = (PNODE)malloc(NODE_LEN);
pNew->value = value;
p->next = pNew;
pNew->next = NULL;
return true;
}
bool insert_list(PNODE pHead, int pos, float value)
{
int count = 1; //计数器
PNODE p = pHead->next;
while(NULL != p)
{
count++;
if(count == pos)
{
break;
}
p = p->next;
}
PNODE pNew = (PNODE)malloc(NODE_LEN);
pNew->value = value;
pNew->next = p->next;
p->next = pNew;
return true;
}
相关文章推荐
- C/C++基本数据结构:链表的基本使用和实现
- 6.数据结构之通用栈(链表实现)
- 探究数据结构之链表Java代码实现(二)
- 数据结构(7)线性表之链表C++实现差集
- 2.数据结构--线性表之链表实现
- 数据结构实现循环链表
- C++ 数据结构链表的实现代码
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- PHP数据结构之三 线性表中的单链表的PHP实现
- 几种简单的数据结构的C++实现,树,图,链表,环形队列,栈等---栈篇
- java数据结构-链表的实现
- 数据结构_队列_用链表动态建立释放节点实现队列各种操作_C++实现
- 数据结构中链表的C#实现部分示例
- 数据结构专题——线性表之单链表及其Java实现
- 数据结构学习-线性表-链表的代码实现
- 数据结构:用单链表实现的队列
- 数据结构实现(链表类模板)
- 典型数据结构--基于链表的队列实现
- 编程中常用的重要的数据结构实现(二)之链表
- 重温数据结构之链表二——C语言实现