单链表的基本操作输入元素并删除其中的最小值(C语言实现)

本文介绍了如何使用C语言中的结构体和typedef创建链表,包括链表的初始化、尾插法插入元素、删除最小值以及遍历链表。详细展示了核心代码和步骤。
摘要由CSDN通过智能技术生成

(一)利用结构体创建链表

注意typedef的使用

在本代码中LNode*s 和ListList s 是等价的

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

(二)链表的初始化操作

 注意此处使用到了二级指针

void InitList(LinkList *s)
{*s=(LinkList)malloc(sizeof(LNode));
 if(*s==NULL)
 return ;
 (*s)->next=NULL;
 
}

(三)利用尾插法创建一个单链表

  注意scanf的使用

void ListInsert(LinkList*L,int a)//尾插法 
{LNode*p=*L;
 LNode*s=NULL;
 int i=0;
 int x;
 for(i=0;i<a;i++)
 {scanf("%d",&x);
 s=(LNode*)malloc(sizeof(LNode));
  if(s==NULL) return ;
  s->data=x;
  s->next=p->next;
  p->next=s;
  p=s;
  
 }
   
	
}

(四)核心代码 删除链表中最小的int 型数据

注意pre premin 指针的使用

void Deletmin(LNode *L)
{LNode*min=L->next;
 LNode*p=min->next;
 LNode*minpre=L;
 LNode*pre=L->next;
 while(p!=NULL)
  {
  if(min->data>p->data)
      {min=p;
      minpre=pre;
      }
  	pre=p;
  	p=p->next;
  }	
  LNode*q=minpre->next;
  minpre->next=q->next;
  free(q);
}

(五)遍历该单链表

void printlist(LNode*s)
{LNode*p=s->next;
 while(p!=NULL)
 {
 	printf("%d ",p->data);
 	p=p->next;
 }
	
 } 

(六)完整代码

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{int data;
struct LNode*next;
	
 } LNode,*LinkList;
void InitList(LinkList *s)
{*s=(LinkList)malloc(sizeof(LNode));
 if(*s==NULL)
 return ;
 (*s)->next=NULL;
 
}

void ListInsert(LinkList*L,int a)//尾插法 
{LNode*p=*L;
 LNode*s=NULL;
 int i=0;
 int x;
 for(i=0;i<a;i++)
 {scanf("%d",&x);
 s=(LNode*)malloc(sizeof(LNode));
  if(s==NULL) return ;
  s->data=x;
  s->next=p->next;
  p->next=s;
  p=s;
  
 }
   
	
}
void printlist(LNode*s)
{LNode*p=s->next;
 while(p!=NULL)
 {
 	printf("%d ",p->data);
 	p=p->next;
 }
	
 } 
 
void Deletmin(LNode *L)
{LNode*min=L->next;
 LNode*p=min->next;
 LNode*minpre=L;
 LNode*pre=L->next;
 while(p!=NULL)
  {
  if(min->data>p->data)
      {min=p;
      minpre=pre;
      }
  	pre=p;
  	p=p->next;
  }	
  LNode*q=minpre->next;
  minpre->next=q->next;
  free(q);
}
int main() {
	LNode *L;
	InitList(&L);
	int a=0;
	printf("行输入元素个数");
	scanf("%d",&a);
	printf("请输入%d个int型数据\n",a);
	ListInsert(&L,a);
	//printlist(L);
    Deletmin(L);
    printf("\n删除最小值之后\n"); 
    printlist(L);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值