-
通过构造一个类来储存线性表的内容。查看全部
-
链表第0个是头,元素从1开始。查看全部
-
一边看一边敲 #include <iostream> #include <stdlib.h> #include "List.h" using namespace std; /*线性表*/ int menu() { cout<<"功能菜单"<<endl; cout<<"1 新建联系人"<<endl; cout<<"2 删除联系人"<<endl; cout<<"3 浏览通讯录"<<endl; cout<<"4 退出通讯录"<<endl; cout<<"请输入:"; int order=0; cin>>order; return order; } void creatperson(List *pList) { Node node; Person person; cout<<"输入用户姓名:"; cin>>person.name; cout<<"输入电话号码:"; cin>>person.phone; node.data=person; pList->ListInsertTail(&node); } int main() { int userorder=0; List *pList=new List(); while(userorder!=4) { userorder=menu(); switch(userorder) { case 1: cout<<"用户指令-------》新建联系人"<<endl; creatperson(pList); break; case 2: cout<<"用户指令-------》删除联系人"<<endl; break; case 3: cout<<"用户指令-------》浏览通讯录"<<endl; pList->ListTravers(); break; case 4: cout<<"用户指令-------》退出通讯录"<<endl; break; } } delete pList; pList=NULL; system("pause"); return 0; } //List.h #ifndef LIST_H #define LIST_H #include "Node.h"查看全部
-
ClearList的功能是清空当然的线性表,不代表是释放线性表的内存,是将线性表当中的已经存放的元素全部清空,其实就是给m_iLength赋值0 就行了。因为以后再赋值是可以覆盖之前的值的查看全部
-
bool List::ListInsertHead(Node *pNode) //m_pList-newNode-next { Node *temp = m_pList -> next; //临时节点指向头节点的下一个节点 Node *newNode = new Node; //在堆中申请内存(若在栈中申请,则函数执行完后,内存就被回收掉了) if(newNode == NULL) //分配内存失败 { return false; } newNode -> data = pNode -> data; //获取传入进来的pNode的data m_pList -> next = newNode; newNode -> next = temp; return true; } bool List::ListInsertTail(Node *pNode) //currentNode-newNode-NULL { Node *currentNode = m_pList; //当前节点指向头节点 while(currentNode -> next != NULL) { currentNode = currentNode -> next; //当前节点往下传递 } //当前节点的下一个节点为NULL时,退出循环 Node *newNode = new Node; //在堆中申请内存,作为新节点 if(newNode == NULL) //若分配内存失败 { return false; } newNode -> data = pNode ->data; //对新节点的数据域进行赋值 newNode -> next = NULL; //新节点作为尾节点,它的下一个节点赋值为NULL currentNode -> next = newNode; //此时当前节点的下一个节点已不是NULL,而是新节点 return true; }查看全部
-
什么是线性表:n个 数据元素的有限序列
1、顺序表:使用数组,访问速度快,搜索能力强(数组本身就有下标)
2、链表:静态链表、单链表、循环链表、双向链表
栈与队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除,二者的区别是:栈只允许在表的一端进行插入和删除操作,是一种“后进先出”的线性表;而队列是允许在一端进行插入操作,在别一端进行删除和操作,是一种”先进先出“的线性表
线性表的应用场景:通讯录、一元多项式
查看全部 -
为什么有了顺序表还需要链表,因为两者互为补充
顺序表的优缺点:
优点:遍历和寻址时非常方便(因为基于数组)
缺点:插入删除元素
链表:
有些计算机语言没有指针:
查看全部 -
链表的清空函数 ClearList() 的解释:
将头结点m_pList后的所有节点删除,并将头结点m_pList的对象指针next指针置为NULL。
void list::ClearList() { Node *currentNode = m_pList->next; while(currentNode != NULL) { Node *temp = currentNode->next; delete currentNode; currentNode = temp; } m_pList->next = NULL; }
m_pList并没有被删除,其数据仍然为零( m_pList->data = 0 ),只是将其的next指针置为NULL( m_pList->next = NULL )。
另外,此处 while(currentNode != NULL) 只是判断节点是否为空,并不是判断节点的对象指针。
原因是:
m_pList 是一个Node类型的对象指针,则其包含两个数据成员,一个是(i nt data ),另外一个是( Node *next )。
其数据成员*next同时也是一个Node类型的对象,可以指向下一个节点(通过 Node *currentNode = m_pList->next 来将其下一个节点赋值给 currentNode )。
m_pList 只作为头结点,其数据成员( m_pList->data )不放元素,没有任何意义;其对象指针成员( m_pList->next ) 只放链表第一个结点的地址。
m_pList 虽然是一个头结点,但不算在链表中,此时 m_iLength = 0。【由3-3 链表编码实战(一)3:55处可知】
查看全部 -
前驱,
后继
Bool InitList(list** list); 创建线性表
Void DestroyList (List *list); 销毁线性表
void clearlist(list*list); 清空线性表
bool listempty (list*list);判断线性表是否为空
int ListEmpty(List*list); 判断线性表的长度
Bool GetElem (list*list,int i,elem*e);获取指定元素
int locateelem(list*list,elem*e)寻找第一个满足e的数据元素的位序
BOOL PriorElem 获取指定元素的前驱
获取指定元素的后继
在第i个位置插入元素
在删除第i个位置的元素
遍历线性表
查看全部 -
线性表:指n个有限个的数据元素序列
数据元素:可以是一条记录,还可以是一个数字,字符,字符串,或者其他用户定义的数据类型
线性表:顺序表(数组),链表(单链表,循环链表,双向链表)
亲自动手,事半功倍
查看全部 -
&a是取地址 *a是取a里面的内容 函数中参数为*a表示要传入的是a的地址&a
查看全部 -
Elem表示数据类型,可以在具体操作中使用不同数据类型。查看全部
-
比较的是 *e,而不是 e , *e 这里是指针。查看全部
-
实战四在看一遍查看全部
-
线性表分为:顺序表(数组),链表 链表分为:静态链表,单链表,循环链表,双向链表查看全部
举报