个元素前面 个元素放在第i 链表将第j_单链表:创建、判空表、计算长度、销毁链表、清空链表、取第i个位置的值、单链表的查找(返回地址、位序)、在第i个元素前插入值为e的结点、删除单链表、头插法建立单链...

本文介绍了单链表的各种操作,包括单链表的创建、判断是否为空、计算长度、销毁链表、清空链表、取第i个位置的值、查找元素以及在第i个元素前插入和删除节点。还展示了头插法和尾插法建立单链表的示例代码。
摘要由CSDN通过智能技术生成

#define _CRT_SECURE_NO_WARNINGS#include#include#include"iostream"

using namespacestd;#define ListSize 10

//单链表的创建

typedef structLNode {int data;//数据域

struct LNode *next;//链接域

}LNode,*Linklist;//单链表的初始化

bool InitList(Linklist &L)

{

L= new LNode;//创建一个新的结点作为头结点,用头指针L指向头结点

L->next = NULL;//让头结点的指针域为空

return true;

}//判断单链表是否为空表:指针域那边为空

boolListEmpty(Linklist L)

{if (L->next)return false;else

return true;

}//销毁单链表---不保留头结点

bool DestroyList(Linklist &L)

{

LNode*p;while(L)

{

p=L;

L= L->next;

delete p;

}return true;

}//清空单链表---保留头指针和头结点,头结点的指针域要置为空

bool DeleteList(Linklist &L)

{

LNode*p, *q;

p= L->next;while(p)

{

q= p->next;

delete p;

p=q;

}

L->next =NULL;return true;

}//求单链表的表长

intListLength(Linklist L)

{int i = 0;

LNode*p;

p= L->next;while(p)

{

p= p->next;

i++;

}returni;

}//取第i个元素的值

bool GetElem(Linklist L, int i, int &e)

{

LNode*p;

p= L->next;int j = 1;while (p && j

{

p= p->next;

j++;

}//查找到最后的情况以及i可能为负数的情况

if (!p || j >i)return false;

e= p->data;return true;

}//单链表的查找---查找某个元素值,返回该元素的地址

LNode *LocateElem(Linklist L, inte)

{

LNode*p;

p= L->next;while (p && p->data !=e)

{

p= p->next;

}returnp;

}//单链表的查找---查找某个元素值,返回该元素的序号

int LocateElemInt(Linklist L, inte)

{

LNode*p;

p= L->next;int i = 1;while (p && p->data !=e)

{

p= p->next;

i= i + 1;

}if(p)returni;else

return 0;

}//单链表的插入---在第i个结点前插入值为e的结点(需要找第i-1个结点)

bool ListInsert(Linklist &L, int i, inte)

{

LNode*p, *s;

p=L;int j = 0;while (p && j < i - 1)

{

p= p->next;

}if (!p || j > i-1)return false;

s= newLNode;

s->data =e;

s->next = p->next;

p->next =s;return true;

}//单链表的删除---删除第i个结点,需要找到第i-1个结点

bool DeleteList(Linklist &L, int i, int &e)

{

LNode*p, *q;int j = 0;

p=L;while (p && j < i - 1)

{

p= p->next;

}if (!(p->next) || j > (i-1))return false;

q= p->next;

e= q->data;

p->next = p->next->next;

delete q;return true;

}//头插法建立单链表

void CreatList_H(Linklist &L, intn)

{

L= newLNode;

L->next =NULL;for (int i = n; i > 0; i--)

{

LNode*p = new LNode;//建立新结点

cin >> p->data;//读入数据

p->next = L->next;

L->next =p;

}

cout<< "创建长度为" << n << "的单链表完毕!"<

}//尾插法建立单链表

void CreatList_R(Linklist &L, intn)

{

L= newLNode;

L->next =NULL;

LNode*r =L;for (int i = 0; i < n; i++)

{

LNode*p = newLNode;

cin>> p->data;

p->next =NULL;

r->next =p;

r=p;

}

}//单链表内容的遍历

voidListDisply(Linklist L)

{

printf("单链表中的内容为:");

LNode*p;

p= L->next;while(p)

{

printf("%d", p->data);

p= p->next;

}

printf("\n\n\n\n");

}intmain()

{//创建一个链表

Linklist L;

InitList(L);

Linklist K;

InitList(K);

Linklist P;

InitList(P);//创建三个结点

LNode *a, *b, *c;

a= newLNode;

b= newLNode;

c= newLNode;//判断空表

if (!ListEmpty(L))

printf("it is not empty!\n");elseprintf("it is empty!\n");//将三个结点串成串连成线儿

L->next =a;

a->next =b;

b->next =c;

c->next =NULL;if (!ListEmpty(L))

printf("it is not empty!\n");elseprintf("it is empty!\n");//给三个结点的数据域赋值

a->data = 23;

b->data = 87;

c->data = 99;

printf("the length of list is: %d\n", ListLength(L));//获取第i个元素的值

inte;

GetElem(L,2, e);

printf("the value of second is:%d\n", e);//单链表的查找---返回地址

printf("\n\nLocateElem--23: %x\n", (unsigned)LocateElem(L, 23));

printf("LocateElem--87: %x\n", (unsigned)LocateElem(L, 87));

printf("LocateElem--99: %x\n", (unsigned)LocateElem(L, 99));//单链表的查找---返回序号

printf("LocateElemInt--87: %d\n\n\n", LocateElemInt(L, 23));//头插法建立单链表---输入几个元素

cout << "头插法建立单链表,请输入数据:" <

CreatList_H(K,5);

printf("the length of list is: %d\n", ListLength(K));//单链表的遍历

ListDisply(K);//尾插法建立单链表---输入几个元素

cout << "尾插法建立单链表,请输入数据:" <

CreatList_R(P,5);

printf("the length of list is: %d\n\n", ListLength(P));//单链表的遍历

ListDisply(P);

getchar();

getchar();

getchar();return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值