C语言动态链表

#include "stdio.h"				
#include "stdlib.h"	//提供malloc()和free()
#include "string.h" //提供strcpy()等
void show();
void add(int a);
void deleteNode();
void addTitle(int a);
void addRand(int index,int a);
void delectRand(int indexs);
struct NODE
{
	int data;
	struct NODE *next;
};
typedef struct NODE Node;
Node* find(int a);
Node *head=NULL;//全局头节点 
Node *end=NULL;//全局尾节点
void add(int a)
{
	 //malloc()函数:在内存里开辟(指定大小)空间 ;返回值是一个指针(void *) 
	 Node *temp=(Node*)malloc(sizeof(Node));//此处注意强制类型转换
	 temp->data=a;//给新节点data赋值 
	 temp->next=NULL;//给新节点的下一个节点的地址为空 
	 if(head==NULL)//判断是否是空链表 
	 {
	 	head=temp; //是空链表;则该节点是头节点;也是尾节点	 	
	 }else
	 {
	 	end->next=temp;//不是尾节点;则把该节点的地址赋给尾节点 
	 }
	 end=temp;//新节点节点作为尾节点	
}
//查询链表所有数据 
void show()
{
	Node *p;
	p=head;
	do
	{
		printf("%d\n",p->data);
		p=p->next;		
	}while(p!=NULL);
}
//指定节点查询
Node* find(int a){
	Node *p;
	p=head;
	do
	{
		if(a==p->data)
		{
			return p;
		}
		p=p->next;		
	}while(p!=NULL);
	return NULL;	
}
//指定位置插入
void addRand(int index,int a)
{
	Node *p=find(index);
	if(p==NULL)
	{
		printf("指定位置没有找到!\n");
		return;
	}
	Node *temp=(Node*)malloc(sizeof(Node));//此处注意强制类型转换
	temp->data=a;//给新节点data赋值 
	temp->next=p->next;//将指定节点的下一个节点地址赋给新节点 
	p->next=temp;//将新节点的地址赋给指定节点
} 
//在头部进行插入
void addTitle(int a)
{
	Node *temp=(Node*)malloc(sizeof(Node));//此处注意强制类型转换
	temp->data=a;//给新节点data赋值 
	temp->next=head;//将指定节点的下一个节点地址赋给新节点 
	head=temp;	
} 
//指定位置删除
void delectRand(int index)
{
	if(index==head->data)//删除的节点是头节点 
	{
		head=head->next;
		return;
	}else
	{
		Node *pt=find(index);
		Node *p;
		p=head;
		while(p->next!=pt){
			p=p->next;
		}
		if(pt->next==NULL)//删除为节点 
		{
			end=p;
		}
		p->next=pt->next;	
	}

	
}
//清空链表 
void deleteNode()
{
	Node *p=head,*pr;
	while(p->next!=NULL)
	{
		pr=p;
		p=p->next;
		free(pr);
	}
	head=NULL;
	end=NULL; 
	
}
int main()
{
	add(1);
	add(2);
	add(3);
	add(4);
	add(5);
	show();
	printf("----------\n");
//	delectRand(1,0);
//	addTitle(100);
	delectRand(5);
	add(5); 
	show();

//	deleteNode();
//	add(5);
//	show();
//	printf("----------");
//	Node *p=find(4);
//	printf("%d",p->data);
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值