数据结构-(有头结点)单链表的基本操作实现----------随笔记录(2)

(一)含有头结点单链表的基本操作的实现:(初始化、增、删、改、查,等)
单链表的结构定义:
#include <stdio.h> 
#include <stdlib.h>

typedef int ElemType;

//定义单链表结构 
typedef struct LNode{     //声明节点的类型和指向结点的指针类型 
	ElemType data;        //数据域 
	struct LNode *next;   //指针域 
}LNode,*LinkList;        //重命名为 LNode LinkList为指向LNode的指针类

//注意:

                在后续定义一个新的链表时一般表达为:   LinkList      L ;

                定义一个结点指针时一般表达为:       LNode    *p ;

补充:  关键字typedef --------数据类型重命名

             格式:  typedef <数据类型>   <别名>

             函数:malloc---------动态申请内存空间

             格式:(Elemtype)malloc(sizeof(Elemtype));

1.单链表的初始化

算法步骤:

1)生成新结点作为头结点,用头指针L指向头结点;

2)将头结点的指针域置空;

//1.初始化,创建头结点 
bool InitList(LinkList &L){
	L=(LNode *) malloc(sizeof(LNode));  //定义一个新结点作为头结点,用指针L指向头结点
	if(L==NULL){    //头结点的指针域包含的是首节点的地址,如果为空则内存不足,分配失败 
		printf("申请内存空间失败\n");
	}
	L->next=NULL;   //给头指针的指针域置空 
	return true;
}


2.头插法

算法步骤:

1)从一个空表开始,重复读入数据;

2)生成新结点,将读入的数据存入新结点数据域中;

3)从最后一个结点开始,依次将各结点插入到链表的前端。

//2.采用头插法创建单链表

//单链表建成后,顺序会与自己输入的顺序呈相反的顺序 
LinkList List_HeadInsert(LinkList &L){     
    LNode *s;  //定义一个新的结点指针 
    int x;     //定义一个整形变量接收数据 
    L=(LNode *)malloc(sizeof(LNode)) ;  //定义一个新结点作为头结点,用指针L指向头结点
    if(L==NULL){    //头结点的指针域包含的是首节点的地址,如果为空则内存不足,分配失败 
        return false;
    }
    L->next=NULL;            //头结点的指针域设为空,即初始为空链表 
    scanf("%d",&x);         //输入元素值 
    while(x!=9999){         //当输入9999结束循环    
        s=(LNode *)malloc(sizeof(LNode));      //创建新的结点s并自动分配内存空间 
        s->data=x;                         //把输入的值x赋值给s结点的数据域 
        s->next=L->next;              //进行前插 
        L->next=s;                         //将头指针指向新插入的结点S 
        scanf("%d",&x);               //继续输入x 
    }
    return L;            //返回一个表 
}

3.遍历:定义一个遍历单链表的函数:

//2.有头结点单链表的遍历 
void LinkList_Printf(LinkList L){
	LNode *p=L->next; //新建一个指针指向首元结点 
	int count=0;      //定义一个计数器,计算单链表的长度 
	printf("单链表成员有:\n") ; 
	while(p!=NULL){   //循环结束条件:p的next为空时停止循环 
		count++;      //开始计数 
		printf("%d ",p->data); //从首元结点开始输出 
		p=p->next;     //移动p指针指向下一个结点 
	}
	printf("\n");
	printf("表中共有: %d   个元素\n",count) ;
	
}

头插法创建单链表的实现:main函数调用头插法函数List_HeadInsert、遍历函数LinkList_Printf

int main(){
	LinkList L;
	InitList(L);
	List_HeadInsert(L);
	LinkList_Printf(L);
}
后台显示:
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值