算法与数据结构之不带头结点的单链表

不带头结点的单链表和带头结点的单链表

和带有头结点的单链表相比,不带头结点的单链表显得更直观。但不带头结点的单链表在插入和删除第 1 个元素时与插入和删除其它元素时的操作不一样,在创建链表时也不一样,要改变链表头指针的值。而带有头点的单链表无论插入和删除第几个元素,其操作都是统一的。

对插入和删除参数传递存在问题,以及对程序运行后出现的乱码存在问题

数据结构之带头结点和不带头结点单链表存在的问题

不带头结点链表实现

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define Destroy Clear	//Destroy和Clear操作是一样的

//和设头结点的单链表在定义存储结构上是相同的
typedef struct Node
{
   
	int data;	//数据域
	struct Node *next;	//指针域
}NODE,*PNODE;

//基本操作
PNODE Create1();	//创建无头结点的单链表,在表头插入数据
PNODE Create2();	//创建无头结点的单链表,在表尾插入数据
void Clear(PNODE pHead);//置空或销毁单链表,
bool Empty(PNODE pHead);//判断单链表是否为空
int	Length(PNODE pHead);//返回单链表中元素的个数
bool Get(PNODE pHead,int i,int *e);//将第i个元素的值赋给e
bool Prior(PNODE pHead,int cur_e,int *pre_e);//求cur_e的前驱元素,用pre_e保存
bool Next(PNODE pHead,int cur_e,int *next_e);//求cur_e的后继元素,用next_e保存
bool Insert(PNODE *pHead,int i,int e);//在第i个元素前面插入元素e
bool Delete(PNODE *pHead,int i,int *e);//删除单链表第i个元素,并用e保存
void Traverse(PNODE pHead);//遍历单链表
void Sort(PNODE pHead);//排序

int main()
{
   
	int val;
	PNODE pHead=Create1();
	printf("初始化链表中的元素为:");
	Traverse(pHead);
	Get(pHead,3,&val);
	printf("第3个元素的值为:%d\n",val);
	Insert(&pHead,6
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值