zoukankan      html  css  js  c++  java
  • 带头结点单链表的基本操作

    /*单链表*/
    #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("************
    ");
    }
    

      

  • 相关阅读:
    35.python之事件驱动模型
    33.python之操作系统,进程,线程
    VRChat之blender2.8版本设置
    VRChat模型制作及上传总篇(201912)
    linux常用指令
    java基础File的简单使用记录
    java 通过实现Comparable接口使用Collections.sort排序 及 利用set的特性对 list 进行去重
    [转发] java字符串-编码转换-工具类
    ssh服务不能远程时,使用telnet远程登录
    java中List遍历删除元素相关做法和注意事项
  • 原文地址:https://www.cnblogs.com/-slz-2/p/13160085.html
Copyright © 2011-2022 走看看