线性表的链式表示和实现
**线性链表的结点包含数据域和指针域两部分**
**头指针表示整个链表,链表名即头指针;链表类型即头指针类型
***线性链表定义***
typedef ??? ElemType;
typedef struct LNode{
ElemType data;//数据域
struct LNode *next;//指针域
}LNode,*LinkList;
LNode node2;//定义一个结点node2;
LinkList La;//定义一个链表La;
LNode *p;//定义一个普通指针变量p;
*****单链表******
优点:空间利用好,插入删除不需要移动数据,表头操作快
缺点——不能随机访问,求前驱,表长慢
附加头结点:为使空表和非空表操作统一,在链表最前附设一个额外的头结点。
默认链表均带头结点
Status GetEle_L(LinkList L,int i,ElemType &e)
{
//L为带头结点元素的头指针
//第i个元素存在时,其值付给e并返回,否则返回ERROR;
LNode *p = L;//P指向第0个元素结点
int j = 0;//J是该结点的位序
while(p&&j<i)
{
p=p->next; ++j;
}
if(!p||i<1) return ERROR;
e=p->data;
return OK;
}
**插入**
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LNode *P = L; int j = 0;
//定位到第i-1个结点,在其后插入一个新开辟的结点
while(p&&j<i-1)
{
p=p->next; ++j;
}
if(!p||i<1) return ERROR;
LNode *q = new LNode;
if(!q) exit(OVERFLOW);
q->data = e;
q->next = p->next;
p->next = q;
return OK;
}
**删除**
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
LNode *p = L;
int j=0;
if(!p||i<1) return ERROR;
while(p&&j<i-1)
{
p = P->next; ++j;
}
q = p->next;
e= q->data;
p->next = q->next;
free(q);
return OK;
}
**逆位序创建含n个结点的链表**
Status ListCreate_L(LinkList &L,int n)
{
LNode *p;
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
for(int i=1;i<=n;++i)
{
p=(LNode *p)malloc(sizeof(LNode));
InputElem(p->data);
p->next = L->next;
L->next = p;
}
}
单链表的表示和实现
最新推荐文章于 2022-07-25 16:38:34 发布