#include <iostream>
#include <cstdlib>
#include <math.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define Status int
using namespace std;
//定义单链表的存储结构
typedef struct LNode
{
int data;//数据域
LNode *next;//指针域
}LNode,*LinkList; //LnkList为指向LNode类型的指针
//将单链表初始化
/*Status InitList(LNode &L)
{
L=new LNode;
L->next=NULL;
return OK;
}*/
//查找元素在单链表中的位置
LNode* LocateElem(LNode L,int e)
{
p=L->next; //初始化一个指向LNode类型的指针,初始值为链表的首元结点
while(p)
{
if(p->data==e)
return p;//如果这个节点的数据域和要查找的数据相等,就返回该指针
else
p=p->next; //如果这个节点的数据域和要查找的数据不相等,就将指针后移
}
return ERROR; //如果遍历链表后都没有找到,就返回ERROR
}
//将元素插入到单链表的第i个位置
Ststus ListInsert(LNode &L,int i,int e)
{
p=L;//初始化一个指向LNode类型的指针
int j=0;
while(p && j<i-1)
{//找到第i-1个节点的位置
p=p->next;
j++;
}
if(!p || j>i-1)
return ERROR; //如果跳出循环时p为空或者j>i-1,则出现错误
LNode s=new LNode; //生成一个新节点
s->data=e; //新节点的数据域为要插入的元素
s->next=p->next; //新节点的指针域为原来的第i个节点
p->next=s;//p的指针域为插入的新节点
return OK;
}
//将单链表第i个位置的元素删除
Satus ListDelete(LNode &L,int i)
{
p=L;//初始化一个指向LNode类型的指针
int j=0;
while((p->next) && j<i-1)
{//找到第i-1个节点的位置
p=p->next;
j++;
}
if(!(p->next) || j>i-1)
return ERROR;//如果跳出循环时p的下一个元素为空或者j>i-1,则出现错误
s=new LNode;
s=p->next;//用一个临时节点s存储要删除的节点
p->next=p->next->next;//改变p的指向
delete s;//删除这个节点
return OK;
}
//采用单链表结构编程实现两个有序单链表的归并运算。
Status mergeList(LNode &La,LNode &Lb,LNode &Lc)
{
LinkList pa, pb, pc, q, p;
pa = La->next; //pa和pb分别指向两链表的首元结点
pb = Lb->next;
Lc = pc = La;//初始时让Lc的头指针指向La所指的链表La的头结点
pc->next = NULL;
while(pa && pb)
{//当pa和pb的指向都不为空时
if(pa->data==pb->data)
{//如果两元素相等
pc->data=pa->data;//将La当前节点的值赋给Lc当前节点
pc=pa;
pa=pa->next;
pb=pb->next;//pa和pb也向后移动
}
else if(pa->data < pb->data)
{//如果链表La当前节点的数据较小
pc->data=pa->data;//将La当前节点的值赋给Lc当前节点
pc=pa;
pa=pa->next;//pa向后移动
}
else if(pa->data > pb->data)
{
pc->data=pb->data;//将Lb当前节点的值赋给Lc当前节点
pc=pb;//指针pc后移
pb=pb->next;//pb向后移动
}
}
pc->next=pa?pa:pb;//跳出循环时如果pc->next=pa则说明La非空,就将La剩下的部分链接在Lc后,
//如果跳出循环时pc->next!=pa就说明Lb非空或者二者都为空,就将Lb剩下的部分链接在Lc后
return OK;
}
数据结构 单链表的初始化、、查找、插入元素、删除元素操作
猜你喜欢
转载自blog.csdn.net/qiankendeNMY/article/details/105404223
今日推荐
周排行