数据结构 c代码2:单链表

下面是用c语言实现的一些单链表的基本操作:

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

typedef struct LNode
{
	int elem;
	struct LNode *next;
}LNode, *LinkList;

/*单链表得初始化*/
LinkList CreatList()
{
	LinkList p = (LNode *) malloc(sizeof(LNode));  //定义一个头节点 
	LinkList temp = p;   //声明一个指针指向头节点 
	
	for(int i=1;i<=5;i++)
	{
		LinkList q = (LNode *) malloc(sizeof(LNode));
		q->elem = i;
		q->next = NULL;		
		temp->next = q;
		temp = q;
	} 
	  
	return p; 
}

/*单链表的插入*/
LinkList InsertElem(LinkList &L, int e, int pos)
{
	LinkList temp = L;
	/*首先要找到插入节点的上一个节点*/
	for(int i=1;i<pos;i++)
	{
		if(temp == NULL)
		{
			printf("插入位置无效!");
			return L;
		}
		temp = temp->next;
	}
	
	LinkList p = (LNode *)malloc(sizeof(LNode));
	p->elem = e;
	p->next = temp->next;
	temp->next = p;
	
	return L;
} 

/*单链表的指定位置元素删除*/
LinkList DelElem(LinkList &L, int e)
{
	LinkList temp = L;
	/*先找到要被删除的上一个节点*/
	for(int i=1; i < e; i++)
	{
		temp = temp->next;
		if(temp == NULL)
			{
				printf("删除的位置无效!\n");
				return L; 
			}
	} 	
	
	LinkList del = temp->next;
	temp->next = del->next;
	free(del);
	return L;
} 

/*单链表的查找*/
int selectElem(LinkList L, int e)
{
	LinkList temp = L;
	int i = 1;
	while(temp->next!=NULL)
	{
		temp = temp->next;
		if(temp->elem == e)
			return i;
		i++;
	}
	
	return -1;
} 

/*单链表的指定位置修改*/
LinkList ModifyElem(LinkList &L, int pos, int e)
{
	LinkList temp = L;
	/*先找到下标为pos的节点*/
	for(int i=1;i<=pos;i++)
	{
		temp = temp->next;
		if(temp == NULL)
			printf("位置信息无效!");
	}
	
	temp->elem = e;
	return L;
}
/*单链表的输出*/ 
void display(LinkList L)
{
	LinkList temp = L;
	while(temp->next!=NULL)
	{
		temp = temp->next;
		printf("%d->",temp->elem);
	}
	printf("NULL\n");
}

int main()
{
	printf("初始化链表为:\n");
	LinkList L;
	L = CreatList();
	display(L);
	
	printf("\n在第4个位置插入元素100:\n");
	L = InsertElem(L, 100, 4);
	display(L);
	
	printf("\n删除第3个位置的元素:\n");
	L = DelElem(L, 3);
	display(L);
	
	printf("\n查找元素100的下标:\n");
	int pos = selectElem(L, 100);
	
	if(pos == -1)
	{
		printf("没有查到该元素!\n"); 
	}
	else
		printf("位置下标为:%d\n", pos);
		
	printf("\n将下标为4的元素更改为1000\n");
	L = ModifyElem(L, 4, 1000);
	display(L);
	system("pause");
	return 0;
} ```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值