线性表的链式存储及相关操作 C语言版

本文详细介绍了使用C语言实现带头结点的单链表,并提供了链表的基本操作,如创建、输出、长度计算、元素获取、插入、删除等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
	线性表的链式存储实现及相关操作  C语言版本
	作者:Shmily
	日期:2011年8月30日
	编译环境 VC++6.0
	带头结点的单链表,结点的下标从1开始
*/
/**************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/**************************************************/
#define	OK		1
#define ERROR	0
#define TRUE	1
#define	FALSE	0
typedef	int		Status;				
typedef int		ElemType;
/**************************************************/
typedef struct node{
	ElemType	data;					//数据域
	struct node *next;					//指针域
}Node, *pNode;
/**************************************************/
//创建一个带头结点的空的单链表
pNode CreateListHead(void)
{

	pNode L = (pNode)malloc(sizeof(Node));
	if (!L)
		exit (-1);
	L->next = NULL;
	return L;
}
/**************************************************/
//输出单链表
void DisLinkList(pNode L)
{
	pNode p = L->next;
	while (p)
	{
		printf("%d ", p->data);
		p = p->next;
	}
}
/**************************************************/
//求单链表的长度
int ListLength(pNode L)
{
	pNode p = L->next;
	int k=0;
	while (p)
	{
		p = p->next;
		++k;
	}
	return k;
}
/**************************************************/
//取得链表中第pos个结点的值并存入e中
Status GetElem(pNode L, int pos, ElemType *e)
{
	pNode p=L->next;
	int i=1;

	while (p && i<pos)
	{
		p = p->next;
		++i;
	}

	if (!p || i>pos)
		return ERROR;
	*e = p->data;
	return OK;
}
/**************************************************/
//在链表中的第pos个位置插入一个值为e的结点
Status ListInsert(pNode L, int pos, ElemType e)
{
	pNode p = L;
	pNode pNew;
	int i=1;

	while (p && i<pos)
	{
		p = p->next;
		++i;
	}

	if (!p || i>pos)	
		return ERROR;
	
	pNew = (pNode)malloc(sizeof(Node));
	pNew->data = e;
	pNew->next = p->next;
	p->next = pNew;
	return OK;
}
/**************************************************/
//删除链表L中的第pos个结点并将该结点的值存入e中
Status ListDelete(pNode L, int pos, ElemType *e)
{
	pNode p = L;
	pNode q;
	int i=1;

	while (p->next && i<pos)
	{
		p = p->next;
		++i;
	}

	if (!(p->next) || i>pos)	
		return ERROR;
	q = p->next;
	p->next = q->next;
	*e = q->data;
	free(q);
	return OK;
}
/**************************************************/
int main(void)
{
	pNode L;
	ElemType e;
	int pos=7;
	L = CreateListHead(L);
	return 0;
}
/**************************************************/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值