链表
算法:
1.通俗定义:
解题的方法和步骤
2.狭义定义:
对存储数据的操作
3.广义定义:
广义的算法也叫泛型
无论数据是如何存储的,对数据的操作都是一样的
我们至少可以通过两种结构来存储数据
数组
1.需要一整块连续的存储空间,内存中可能没有
2.插入元素,删除元素效率极低。
3.查找数据快
链表
1.查找效率低
2.不需要一块连续的内存空间
2.插入删除元素效率高
专业术语
头指针
存放头结点地址的指针变量
头结点
数据类型和首节点的数据类型一模一样
头结点是首节点前面的那个节点
头结点并不存放有效数据
设置头结点的目的是为了方便对链表操作
首节点
存放第一个有效数据的节点
尾节点
存放最后一个有效数据的节点
尾节点的指针域是空的(null)
头指针---->头结点---->(首节点----->链表------>尾节点) ()内是有效数据
只需要知道头指针就能确定一个链表(尾节点指针域是null)
------------------------------------------------------------------------------------------------------
2012年2月6日7:30:48
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
struct Node{
int data;
struct Node * pNext;
};
struct Node * create_list();
void traverseList(struct Node *);
int main(void){
struct Node * pHead = NULL; //定义头指针
pHead = create_list(); //构造链表,返回头结点地址
traverseList(pHead); //输出链表
return 0;
}
struct Node * create_list(void){
int len;
int i;
int val;
//创建一个头结点
struct Node * pHead = (struct Node *)malloc(sizeof(struct Node));
if(NULL == pHead){
printf("分配失败,程序终止!\n");
exit(-1);
}
struct Node * pTail = pHead; //将头结点的地址给指针变量pTail使pTail指向头结点
pTail->pNext = NULL; //头结点的结构体元素(下一个节点地址)赋值
printf("请输入你要创建链表的节点个数:len = ");
scanf("%d", &len);
for(i=0; i<len; i++){
printf("请输入第%d个节点的值:", i+1);
scanf("%d", &val);
//给第 i+1 个节点分配内存空间
struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
if(NULL == pNew){
printf("分配失败,程序终止!\n");
exit(-1);
}
//内存分配成功后
pNew->data = val; //新节点赋值
pTail->pNext = pNew; //pNew指向的地址给头结点的变量
pNew->pNext = NULL; //新节点地址变量给空值
pTail = pNew; //重新使pTai 替换 pNew进行下一次分配创建
}
return pHead;
}
void traverseList(struct Node * pHead){
struct Node * p = pHead->pNext;
while(NULL != p){
printf("%d\n", p->data);
p = p->pNext;
}
return;
}
------------------------------------------------------------------------------------------------------
分享到:
相关推荐
//第8题:复制链表。输入:一个无序正整数链表(输入为0表示终止)。 //输出:三行,每行一个链表,分别满足题目中的三个链表的要求。 //这道题目必须要复制链表,所以说,不能直接将输入的链表作为第一小题的输出,...
//第7题:有序链表合并。输入:两个有序正整数链表 //(保证正整数从小到大输入,但可能有重复数字,输入为0表示终止)。 //输出:合并后的链表(将链表中的数字有序输出)。 //要求:一定要用链表实现,不能单单复制...
输入:两个链表,每个链表均为若干个有序正整数(单个链表中无重复数字), 以0表示一个链表终止,第一个链表为S1,第二个链表为S2。 输出:分三行,分别输出两个集合的并集、差集(S1-S2)和交集。因 为要连续输出三个...
C语言数据机构——链表,是有关链表的所有操作,其中的每个函数我都用debug调试过。不会出现错误。
用c语言写链表归并
数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表数据结构实验——链表
C语言程序设计——职工管理系统(链表).zip
还是象征性的要大家1个积分
C语言链表
小型通讯录程序c语言链表实现(源代码) CentOS下vim编辑器gcc编译器
C语言指针,数组,结构体链表,函数的总结
C语言——链表技术实现的学生信息管理。直接把txt文档中的代码复制到vc++ 6.0中即可。
计算机二级C语言上机考试——结构体与链表.pdf
uC/OS-II学习笔记—空闲链表和就绪链表
线性表——链表PPT学习教案.pptx
1、输入学生信息,建立链表; 2、输出链表中全部学生信息; 3、根据姓名检索学生信息; 4、打印成绩不及格学生名单。
栈的实现(C语言)数组实现以及链表实现源码,以及各个功能测试代码函数等 和后缀式转前缀式的用例