#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;
//1.单链表的初始化
Status InitList(LinkList &L){
L = new LNode;
L->next = NULL;
return OK;
}
//2.获取链表的长度
Status ListLength(LinkList L){
LinkList p;
int length;
p = L;
length = 0;
while (p)
{
length++;
p = p->next;
}
return length - 1;
}
//3.获取元素
Status GetElem(LinkList L, int i, ElemType &e){
LinkList p;
int j = 1;
ElemType e;
while (p&&j<i)
{
p = p->next;
++j;
}
if (!p || j>i){
return ERROR;
}
e = p->data;
return OK;
}
//4.插入元素
Status LinkInsert_L(LinkList &L, int i, ElemType e){
LinkList p,s;
int j = 0;
p = L;
while (p&&j<i-1)
{
p = p->next;
++j;
}
if (!p || j>i - 1){
return ERROR;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
//5.删除元素
Status ListDelete(LinkList L, int i, ElemType &e){
LinkList p, q;
int j;
p = L;
j = 0;
while (p->next&&j<i-1)
{
p = p->next;
++j;
}
if (!(p->next) || j>i - 1){
return ERROR;
}
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return OK;
}
//6.清空链表
void ClearList(LinkList &L){
LinkList p;
while (L->next)
{
p = L->next;
L->next = p->next;
free(p);
}
}
//7.逆序输入 n 个数据元素,建立带头结点的单链表
void CreteList(LinkList &L, int n){
LinkList p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
for (int i = n; i > 0; --i)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->next);
p->next = L->next;
L->next = p;
}
}
//8.单链表合并操作
Status MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc){
LNode *pa, *pb, *pc;
pa = La->next;
pb = Lb->next;
Lc = pc = La;
while (pa&&pb)
{
if (pa->data<=pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
free(Lb);
}
//9.打印线性表
void PrintList(LinkList L){
LinkList p = L->next;
while (p)
{
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
数据结构(2):单链表的基本操作
最新推荐文章于 2021-03-26 15:11:25 发布