链表的动态创建释放输出和删除某个结点,删除某个数据域的结点,插入一个结点等操作

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	int data;
	struct node *next;
}*PNODE,NODE;

void insert(PNODE head, int n);
PNODE init();
void del(PNODE head,int n);
void ins(PNODE head,int n);
void delet(PNODE head,int n);
void print(PNODE head);
//void freeAllNode(PNODE head);

//主函数
int main()
{
	int i,t,m,x;
	PNODE head = init();    //接受init()的返回值, 即指向了temp
	for (i = 0; i < 10;i++)  //创建了十个结点
	      insert(head,i);
 
//freeAllNode(head);
 printf("请输入你要删除的是第几个结点:\n");
 scanf("%d",&t);
 del(head,t);
 print(head);
 printf("请输入一个你要插入的结点的位置:\n");
 scanf("%d",&m);
 ins(head,m);
  print(head);
  printf("请输入你要删除的一个数据:\n");
  scanf("%d",&x);
  delet(head,x);
  print(head);
	return 0;
}

//链表的初始化
PNODE init()
{
	PNODE temp = (PNODE)malloc(sizeof(NODE));
	temp->next = NULL;   //创建了一个头结点
	return temp;
}

//可以说是插入函数也可以说是创建函数
void insert(PNODE head,int n)
{
 
	PNODE temp=(PNODE)malloc(sizeof(struct node));
	temp->data = n;
	//头插
	temp->next = head->next;
	head ->next= temp;

}

//删除一个指定的结点
void del(PNODE head,int n)
{
  PNODE p,q,p1;
  int i=0;
  p=head;
  
  while(p->next!=NULL)
  {
     i++;
	 p=p->next;
	 if(i<n)
	 {
	   q=p;
	   
	 }

  }
       p1=q->next;
	   q->next=p1->next;
	   free(p1);
}

//向链表中再插入一个结点
void ins(PNODE head,int n)
{
   PNODE p=head,q;
   //在链表的第n个位置上再插入一个结点
   int i=0;
PNODE p1=(PNODE)malloc(sizeof(NODE));
   p1->data=10;
   while(p->next!=NULL)
   {
        i++;
	
		if(i<n+1)
		{
		   q=p;//q是要插入结点的前一个结点。
		  
		}
			p=p->next;
	
   }
    	p1->next=q->next;
		   q->next=p1;

}


//删除数据域是n的结点
void delet(PNODE head,int n)
{
  PNODE p=head->next,q1;
  while(p!=NULL)
  {	 int i=0;
      if(p->data!=n)
	  {
	     	  i++;
			  q1=p;
	  }
	  if(p->data==n)
	  {
	      q1->next=p->next;
		  free(p);
		  break;
	  
	  }
	   p=p->next;
	   

  }
  	
}
  //输出函数
void print(PNODE head)
{
	PNODE p=head->next;
	while (p!=NULL)
	{
		printf("%d->", p->data);
		p = p->next;
	}
	printf("NULL\n");
}
//释放掉所有的空间
/*void freeAllNode(PNODE head)
{
	PNODE p = head,temp;
	while (p != NULL)
	{
		temp = p->next;
		free(p);
		p = temp;
	}
}*/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sustyle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值