• 带头结点单链表的基本操作


    /*单链表*/
    #include<stdio.h>
    #include<malloc.h>
    typedef int ElemType;
    typedef struct LNode{
    	ElemType data;
    	struct LNode *next;
    }LNode,*LinkList;
    bool InitList(LinkList &L)	//初始化单链表
    {
    	L=(LNode*)malloc(sizeof(LNode));
    	if(L==NULL)
    		return false;
    	L->next=NULL;
    	return true;
    }
    LinkList head_InsertList(LinkList &L)	//头插法建立单链表
    {
    	ElemType e;
    	printf("please input some number:");
    	scanf("%d",&e);
    	while(e!=-1)
    	{
    		LNode *s=(LNode*)malloc(sizeof(LNode));
    		s->data=e;
    		LNode *p=L;
    		s->next=p->next;
    		p->next=s;
    		scanf("%d",&e);
    	}
    	return L;
    }
    LinkList tail_InsertList(LinkList &L)	//尾插法建立单链表
    {
    	ElemType e;
    	LNode *p=L;
    	printf("please input some number:");
    	scanf("%d",&e);
    	while(e!=-1)
    	{
    		LNode *s=(LNode*)malloc(sizeof(LNode));
    		s->data=e;
    		p->next=s;
    		p=s;			//p始终指向尾部
    		scanf("%d",&e);
    	}
    	p->next=NULL;
    	return L;
    }
    bool InsertList(LinkList &L,ElemType i,ElemType e)	//插入节点操作
    {
    	if(i<1)
    		return false;
    	LNode *p=L;
    	int j=0;		//当前p指针位置
    	while(p!=NULL && j<i-1)		//找到位置是第i-1的节点
    	{
    		p=p->next;
    		j++;
    	}
    	if(p==NULL)
    		return false;
    	LNode *s=(LNode*)malloc(sizeof(LNode));
    	s->data=e;
    	s->next=p->next;
    	p->next=s;
    	return true;
    }
    bool DeleteList(LinkList &L,ElemType i)	//删除节点操作
    {
    	if(i<1)
    		return false;
    	LNode *p=L,*q=L->next;
    	int j=0;
    	while(q!=NULL && j<i-1)
    	{
    		p=q;
    		q=q->next;
    		j++;
    	}
    	if(q==NULL)
    		return false;
    	p->next=q->next;
    	free(q);
    }
    LNode * getElem1(LinkList L,ElemType i)		//按位查找节点
    {
    	if(i<0)
    		return NULL;
    	int j=0;
    	LNode *p=L;
    	while(j<i && p!=NULL)
    	{
    		p=p->next;
    		j++;
    	}
    	return p;
    }
    LNode * getElem2(LinkList L,ElemType e)		//按值查找节点
    {
    	if(L==NULL)
    		return NULL;
    	LNode *p=L->next;
    	while(p!=NULL && p->data!=e)
    		p=p->next;
    	return p;
    }
    void Print(LinkList L)		//输出单链表
    {
    	LNode *p=L->next;
    	while(p!=NULL)
    	{
    		printf("%d
    ",p->data);
    		p=p->next;
    	}
    }
    		
    void main()
    {
    	LinkList L;
    	InitList(L);
    	head_InsertList(L);
    	Print(L);
    	printf("************
    ");
    	DeleteList(L,2);
    	Print(L);
    	printf("************
    ");
    	InsertList(L,2,100);
    	Print(L);
    	printf("************
    ");
    	printf("%d
    ",getElem1(L,3)->data);
    	printf("************
    ");
    	printf("%d
    ",getElem2(L,100)->data);
    	printf("************
    ");
    }
    

      

  • 相关阅读:
    Windows 10 Shell Commands
    scala spark streaming 打印kafka 数据
    Kafka 与 Flume 如何选择
    Scala map中下划线_._2的含义
    Spark中reduceByKey(_+_)的说明
    spark 内存设置
    windows spark3.1 hdfs 测试
    @Autowired、@Resource、和@Service注解详解
    Python 打印对象
    Python + logging 输出到屏幕,将log日志写入文件
  • 原文地址:https://www.cnblogs.com/-slz-2/p/13160085.html
Copyright © 2020-2023  润新知