线性表两种建表方法
2020-08-05 本文已影响0人
sakura579
顺序表建表
数组作为顺序表的载体
length描述顺序表的长度
#include <iostream>
using namespace std;
int maxSize=10;
int length;
int createList(int A[],int &length)
{
cin>>length;
if(length>maxSize)
return 0;
for(int i=0;i<length;i++)
cin>>A[i];
return 1;
}
int main(){
int A[10];
int flag = createList(A,length);
for(int i=0;i<length;i++){
cout<<A[i]<<endl;
}
cout<<"flag="<<flag;
}
单链表建表
就是一系列插入操作
为了规范操作 一般在两个位置进行插入
在表的头部 和表的尾部
因此 有头插法建表法和尾插法建表法
尾插法建表法 R是尾部的意思(不知道哪个单词的首字母)
带头结点的单链表
建单链表的数据来源问题 就是结点data域的值
一种是传入一个数组 用数组的值设置链表中每个结点中data域的值
另一种是通过键盘输入设置链表中每个结点中data域的值
p指针是接收新结点的指针
r指针是始终指向当前尾部结点的指针
你每次为一个单链表申请结点空间的时候
把它的next指针设置为null是一个非常好的习惯
可能在很多情况下 避免错误
这句话删掉 代码是没有问题的
这里是链表尾部插入结点
为了方便记忆 写成这个样子
统一成在链表中部插入结点的操作
形式上更统一些
带头结点的单链表(H Head )
头插法建表法
通过这两种方法 对于同一组输入数据
你会得到两个相反数据的链表
这个while循环 用来检查是否有重复的数据
while 前面 p = head->next 是初始化p
使p指向第一个数据结点 再进入while 扫描整个链表
没有重复的结点
则while循环执行到最后 p为null指针
进入if语句块 建立新结点 保存这个字符
有重复结点 while循环break跳出 p不为null
不会进入if语句块