链式存储(链表)

有头单向链表

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
	int data;
	struct node* next;
}link_node_t;
/* 创建空链表 */
link_node_t* createEmptynode ()
{
	link_node_t* p = malloc(sizeof(link_node_t));
	if(p == NULL)
	{
		printf("goto bad\n");
		return NULL;
	}
	p->next = NULL;
}
/* 删除指定位置元素 */
void deletelink_node (link_node_t* p,int post)
{
	int i;
	if(post < 1 || post > getlenthlink(p))
	{
		printf("删除失败\n");
		return ;
	}
	link_node_t* ptail;
	for(i=0;i<post-1;i++)
	{
		p=p->next;
	}
	ptail = p->next;
	p->next = ptail->next;
	free(ptail);
}
/* 查找指定元素位置 */
void getpostlinknode (link_node_t* p,int x)
{
	int i=0;
	while(p->next!=NULL)
	{
		p=p->next;
		i++;
		if(p->data == x)
		{
			printf("位置在第%d个\n",i);
			return ;
		}
	}
}
/* 判断是否为空 */
int isEmptylinknode (link_node_t* p)
{
	return p->next == NULL ;
}
/* 指定位置插入元素 */
void insertintolink_node (link_node_t* p,int post,int x)
{
	int i;
	if(post<1 || post > getlenthlink(p)+1)
	{
		printf("插入失败\n");
		return ;
	}
	link_node_t* pnew = malloc(sizeof(link_node_t));
	if(p == NULL)
	{
		printf("goto bad\n");
		return ;
	}
	pnew->data = x;
	pnew->next = NULL;
	for(i=0;i<post-1;i++)
	{
		p = p->next;
	}
	pnew->next = p->next;
	p->next = pnew;
}
/* 清空表 */
void clearlinknode (link_node_t* p)
{
	while(p->next!=NULL)
	{
		link_node_t* k = p->next;
		p->next = k->next;
		free(k);
	}
}
/* 遍历链表 */
void showlinknode (link_node_t* p)
{
	while(p->next!=NULL)
	{
		p=p->next;
		printf("%d ",p->data);
	}
	printf("\n");
}
/* 求表长 */
int getlenthlink (link_node_t* p)
{
	int x=0;
	while(p->next!=NULL)
	{
		p=p->next;
		x++;
	}
	printf("长度为%d\n",x);
	return x;
}

int main(int argc, const char *argv[])
{
	link_node_t* p = createEmptynode();
	insertintolink_node(p,1,11);
	insertintolink_node(p,2,22);
	insertintolink_node(p,3,33);
	insertintolink_node(p,4,44);
	insertintolink_node(p,5,55);
	showlinknode(p);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值