线性表的链式表示---单链表(C++)

线性表的链式表示-----单链表(C++)

编程小白学习了一周数据结构,掌握了单链表的一些基本操作。如初始化、插入、删除、查询等。以下是单链表基本操作的实现。

定义单链表的结构类型
typedef struct LNode {//定义单链表结构类型
 ElemType data;//创建数据域
 struct LNode* next;//创建指针域
}LNode,*LinkList;
初始化一个单链表,带有头节点
bool InitList(LinkList& L) {
 L = new LNode;//分配一个头结点
 if (L == NULL) {//内存分配不够
  return false;
 }
 L->next = NULL;//头结点的指针为空
 return true;
}
采用头插法建立单链表
LinkList List_HeadInsert(LinkList& L) {
 cout << "采用头插法建立单链表" << endl;
 int x;
 cin >> x;//x表示s->data的值
 while (x != 9999) {//当输入9999时,结束创建链表
  LNode* s = new LNode;//申请一个结点s
  s->data = x;
  //将s插入到头结点之后
  s->next = L->next;
  L->next = s;
  cin >> x;
 }
 return L;
}
采用尾插法建立单链表
LinkList List_TailInsert(LinkList& L) {
 cout << "采用尾插法建立单链表" << endl;
 LNode* r = L; //申请一个结点r,r当前是头结点
 int x = 0;
 cin >> x;
 while (x != 9999) {//当输入9999时,结束创建链表
  LNode* s = new LNode;//给结点s分配新的内存
  s->data = x;
  r->next = s;
  r = s;//将结点r置为尾结点
  cin >> x;
 }
 r->next = NULL;//尾结点置空
 return L;
}
按值查找表结点
LNode* LocateElem(LinkList L, ElemType e) {
 LNode* p = L->next;
 while (p != NULL) {
  if (p->data == e) {
   return p;
  }
  else {
   p = p->next;
  }
 }
 return NULL;
}
在第i个位置插入元素
bool ListInsert(LinkList& L, int i, ElemType e) {
 if (i < 1) {//插入的位置小于1,不合法
  return false;
 }
 LNode* p = L;//申请新的结点p,p当前是头结点
 int j = 0;
 while (p != NULL && j < i - 1) {
  p = p->next;//p跳到后一个结点
  j++;
 }
 if (p == NULL) {//i的值大于链表的长度时,结点不存在
  return false;
 }
 LNode* s = new LNode;//申请一个新的结点s
 //将结点s插到结点p之后
 s->data = e;
 s->next = p->next;
 p->next = s;
 return true;
}
按序号查找结点
LNode* GetElem(LinkList& L, int i) {
 if (i < 1) {//序号小于1,不合法
  return NULL;
 }
 int j = 1;
 LNode* p = L->next;//申请一个结点p,头指针指向p
 while (j < i) {
  p = p->next;
  j++;
 }
 if (p == NULL) {//i的值大于链表的长度时,结点不存在
  return NULL;
 }
 return p;
}
按位序删除结点
bool ListDelete(LinkList& L, int i, ElemType e) {
 if (i < 1) {
  return false;
 }
 LNode* s = L->next;
 int j = 1;
 while (j < i - 1) {
  s = s->next;
  j++;
 }
 if (s == NULL || s->next == NULL) {
  return false;
 }
 LNode* q = s->next;
 e = q->data;
 s->next = q->next;
 delete q;
 return true;
}
求链表长度
int ListLength(LinkList L) {
 LNode* s = L;
 int i = 0;
 while (s->next != NULL) {
  s = s->next;
  i++;
 }
 return i;
}
遍历单链表
void Print(LinkList L) {
 int i = 1;
 LNode* s = L->next;
 while (s != NULL) {
  cout << s->data << "\t";
  s = s->next;
 }
 cout << endl;
}

写此文章的目的是为了记录自己的学习过程,数据结构尚在初学阶段,代码仅供参考。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值