#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{//单链表存储结构
int data;
struct LNode *next;
}LNode, *LinkList;
int CreateList_L(LinkList &L)
{//建立带表头结点的单链表L
LinkList L=(LinkList)malloc(sizeof(LNode));
if(L==NULL)
return -1;
L->next=NULL;
return 0;
}
int GetElem_L(LinkList L, int i, int &e)
{//L为带头结点的单链表的头指针,当第i个元素存在时,其值赋给e并返回
LinkList p=L->next;
int j=1;
while(p!=NULL && j<i)
{
p=p->next;
j++;
}
if(p==NULL || j>i)
return -1;
e=p->data;
return 0;
}
int ListInsert_L(LinkList &L, int i, int e)
{//在带头结点的单链表L中第i个位置之前插入元素e
LinkList p=L;
int j=0;
while(p!=NULL && j<i-1)
{
p=p->next;
j++;
}
if(p!=NULL || j>i-1)
return -1;
LinkList s=(LinkList)malloc(sizeof(LNode));
if(LinkList==NULL)
return -1;
s->data=e;
s->next=p->next;
p->next=s;
return 0;
}
int ListDelete_L(LinkList &L, int i, int &e)
{//在带头结点的单链表L中,删除第i个元素,并由e返回其值
LinkList p=L;
int j=0;
while(p!=NULL &&j<i-1)
{
p=p->next;
j++;
}
if(p!=NULL || j>i-1)
return -1;
LinkList q=p->next;
e=q->data;
p->next=p->next->next;
free(q);
return 0;
}
int MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc)
{//已知单列表La和Lb的元素按值非递减排列,归并La和Lb得到新的
//单列表Lc,Lc的元素按值非递减排列
LinkList pa=La->next;
LinkList pb=Lb->next;
LinkList Lc,pc;
Lc=La;//将La的头结点作为Lc的头结点
pc=Lc;
while(pa!=NULL && pb!=NULL)
{
if(pa->data <= pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa!=NULL)
{
pc->next=pa;
}
if(pb!=NULL)
{
pc->next=pb;
}
free(Lb);//第一次写代码的时候把这个给漏掉了。。。
return 0;
}
单链表的基本操作
最新推荐文章于 2024-07-08 16:12:05 发布