c/c++语言开发共享详解C语言之单链表

目录一、思路步骤1. 定义结构体2.初始化3.求当前数据元素的个数4.插入5.删除6.释放内存空间二、代码总结一、思路步骤1. 定义结构体a.数据域:用来存放数据b.指针域:用来存放下一个数据的位置2

目录
  • 一、思路步骤
    • 1. 定义结构体
    • 2.初始化
    • 3.求当前数据元素的个数
    • 4.插入
    • 5.删除
    • 6.释放内存空间
  • 二、代码
    • 总结

      一、思路步骤

      1. 定义结构体

      a.数据域:用来存放数据

      b.指针域:用来存放下一个数据的位置

      2.初始化

      申请头结点,并将其初始化为空

      3.求当前数据元素的个数

      详解C语言之单链表

      a.设置一个指针变量p指向头结点和计数变量size等于0

      b.循环判断p->next是否为空,如果不为空,就让指针p指向它的直接后继结点,并让size自增

      c.返回size

      4.插入

      详解C语言之单链表

      a.设置两个指针,一个指向头结点,另一个要动态申请内存空间存放要插入的数
      b.找到要插入位置的前一位,并判断插入位置是否正确
      c.生成新结点,给新结点数据域赋值,执行步骤①,在执行步骤②

      5.删除

      详解C语言之单链表

      a.设置两个指针p、q,p指向头结点,q指向要被删除的结点

      b.找到要删除位置的前一位,并判断删除位置是否正确、存在

      c.q指向被删除的结点,将被删除结点的数据域赋值给x,p指向被删除结点的下一个结点,释放q的内存空间

      6.释放内存空间

      最后记得将头结点置空哦!要不然容易出现野指针。

      二、代码

        #include <stdio.h>  #include <stdlib.h>  typedef int datatype;//给int起个别名,方便以后修改  typedef struct node  {  	datatype data;//数据域  	struct node *next;//指针域  }slnode;  //初始化  void listinit(slnode **head)  {  	*head = (slnode *)malloc(sizeof(slnode));//申请头结点  	(*head)->next = null;  }  //求当前数据元素个数  int listlength(slnode *head)  {  	slnode *p = head;  	int size = 0;  	while (p->next != null)  	{  		p = p->next;  		size++;  	}  	return size;  }  //插入  int listinsert(slnode *head, int i, datatype x)  {  	slnode *p, *q;  	int j;  	p = head;  	j = -1;  	while (p->next != null && j < i - 1)  	{  		p = p->next;  		j++;  	}  	if (j != i - 1)  	{  		printf("插入参数位置错误!!!n");  		return 0;  	}  	q = (slnode *)malloc(sizeof(slnode));//生成新结点  	q->data = x;  	q->next = p->next;  	p->next = q;  	return 1;  }  //删除  int listdelete(slnode *head, int i, datatype *x)  {  	slnode *p, *q;  	int j;  	p = head;  	j = -1;  	while (p->next != null && p->next->next != null && j < i - 1)  	{  		p = p->next;  		j++;  	}  	if (j != i - 1)  	{  		printf("删除位置参数错误!!!n");  		return 0;  	}  	q = p->next;  	*x = q->data;  	p->next = p->next->next;  	free(q);//释放被删除结点的内存空间  	return 1;  }  //按位取  int listget(slnode *head, int i, datatype *x)  {  	slnode *p;  	int j;  	p = head;  	j = -1;  	while (p->next != null && j < i)  	{  		p = p->next;  		j++;  	}  	if (j != i)  	{  		printf("取出位置参数错误!!!n");  		return 0;  	}  	*x = p->data;  	return 1;  }  //释放  void listdestroy(slnode **head)  {  	slnode *p, *q;  	p = *head;  	while (p != null)  	{  		q = p;  		p = p->next;  		free(q);  	}  	*head = null;  }    int main()  {  	slnode *head;  	int i, x;  	listinit(&head);  	for (i = 0; i < 10; i++)  		listinsert(head, i, i + 10);  	listdelete(head, 9, &x);  	for (i = 0; i < listlength(head); i++)  	{  		listget(head, i, &x);  		printf("%d ", x);  	}  	listdestroy(&head);  	system("pause");  	return 0;  }  

      总结

      本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<计算机技术网(www.ctvol.com)!!>的更多内容!

      需要了解更多c/c++开发分享详解C语言之单链表,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/948739.html

      (0)
      上一篇 2021年11月22日
      下一篇 2021年11月22日

      精彩推荐