C++编程练习(2)----“实现简单的线性表的链式存储结构“

来源:互联网 发布:模拟通话环境软件 编辑:程序博客网 时间:2024/06/09 23:50

单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素。

对于查找操作,单链表的时间复杂度为O(n)。

对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1)。

单链表不需要分配存储空间,只要有就可以分配,元素个数也不受限制。


链式存储结构中,结点由存放数据元素的数据域和存放后继结点地址的指针域组成。

具体代码如下:

#include<iostream>#define OK 1#define ERROR 0#define TRUE 1#define ERROR 0typedef int ElemType;typedef int Status;struct Node{public:Node():data(0),next(NULL) {};ElemType data;Node *next;Status GetElem(int i,ElemType *e) const;Status ListInsert(int i,ElemType e);Status ListDelete(int i,ElemType *e);Status ShowList();};Status Node::GetElem(int i,ElemType *e) const{int j=1;/*j为计数器*/Node *p=new Node;p=next;while (p && j<i){p=p->next;++j;}if (!p || j>i)return ERROR;*e=p->data;return OK;}/*初始条件:顺序线性表已存在,1<=i<=ListLength*//*操作结果:在表中第i个结点位置之前插入新的数据元素e,链表长度加1*/Status Node::ListInsert(int i,ElemType e){int j=1;Node *p=new Node;Node *s=new Node;p=this;while (p && j<i){p=p->next;++j;}if (!p || j>i)return ERROR;s->data=e;s->next=p->next;p->next=s;return OK;}/*初始条件:线性表已经存在,1<=i<=ListLength*//*操作结果:删除表的第i个结点,并用e返回其值,线性表长度减1*/Status Node::ListDelete(int i,ElemType *e){int j;Node* p=new Node;Node* q=new Node;p=this;j=1;while(p->next && j<i){p=p->next;++j;}if (!(p->next) || j>i)return ERROR;q=p->next;/*要删除的结点是p->next*/p->next=q->next;*e=q->data;delete q;return OK;}Status Node::ShowList() {Node* p=new Node;p=this;while (p->next){std::cout<<p->data<<"  ";p=p->next;}std::cout<<p->data<<std::endl;return OK;}

单链表适用的场景:

1、需要频繁插入和删除时。

2、线性表中的元素个数变化较大或者根本不知道多大时。

0 0