博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表 创建 插入 删除 查找 合并
阅读量:5089 次
发布时间:2019-06-13

本文共 4099 字,大约阅读时间需要 13 分钟。

最近学习了一下单链表的操作,将代码保存如下,供以后查看。

链表创建:

1.先建立一个不含数据的头指针*head,头指针的链接域为NULL。

2.声明一个用于暂存新申请空间的指针*pc,一个用于保存创建的链表的指针*r,令*r指向*head。

3.在循环中,为指针*pc申请空间,并给数据域赋值,head->next = pc, pc->next = NULL, head = pc。

#define _CRT_SECURE_NO_DEPRECATE  /*取消scanf,printf不安全之类的错误提示*/#include 
#include
typedef struct node{ int value; struct node* next;}listnode;listnode* Creat_List1(int nodenum, int *data); //最先进去的元素在最后面listnode* Creat_List2(int nodenum, int *data); //最先进去的元素在最前面int Get_Link_Element(listnode* head, int i); //取得头指针为head的链表中的第i个元素的值(包括第0个元素)void Insert_List(listnode* head, int a, int i);void Delet_List(listnode* head, int i); //删除第i个元素listnode* Merge_TWO_Linklist(listnode *list1, listnode *list2);//合并两个有序链表int main(){ int data; listnode *linka, *linkb, *linkc, *linkd, *linke; linka = (listnode*)malloc(sizeof(listnode)); linkb = (listnode*)malloc(sizeof(listnode)); linkc = (listnode*)malloc(sizeof(listnode)); linkd = (listnode*)malloc(sizeof(listnode)); linke = (listnode*)malloc(sizeof(listnode)); int a[5] = { 1, 3, 5, 7, 9 }; int b[3] = { 2,2, 4 }; linka = Creat_List2(5, a); linkb = Creat_List2(3, b); Insert_List(linkb, 10, 1); Delet_List(linkb, 1); linkc=Merge_TWO_Linklist(linka, linkb); data = Get_Link_Element(linkb, 1); printf("%d\n", data);}//新元素总是插入到头指针后面,结果就是原先的元素一直往后移listnode* Creat_List1(int nodenum,int *data){ listnode *pc; //保存新节点 listnode *head; head = (listnode*)malloc(sizeof(listnode)); head->next = NULL; //先建立一个带头结点的单链表 /*开始插入元素*/ for (int i = 0; i < nodenum; i++) { pc = (listnode*)malloc(sizeof(listnode)); pc->value = data[i]; pc->next = head->next; head->next = pc; } return head;}//新元素插入到头指针后面,头指针一直往后移listnode* Creat_List2(int nodenum, int *data){ listnode *pc; //保存新节点 listnode *head; listnode *r;//保存产生的链表 head = (listnode*)malloc(sizeof(listnode)); head->next = NULL; //先建立一个带头结点的单链表 r = head; /*开始插入元素*/ for (int i = 0; i < nodenum; i++) { pc = (listnode*)malloc(sizeof(listnode)); pc->value = data[i]; head->next = pc; pc->next = NULL; head = pc; } return r;}//取得头指针为head的链表中的第i个元素的值(包括第0个元素)int Get_Link_Element(listnode* head, int i){ /*创建一个扫描指针,让它指向第一个元素*/ listnode* pc; int j = 0; //计数 pc = (listnode*)malloc(sizeof(listnode)); pc = head->next; while (pc != NULL && j < i) //遍历 { pc = pc->next; j++; } if (pc == NULL || j > i) exit(-1); return pc->value;}/**合并两个有序链表,把list2合并到list1*/listnode* Merge_TWO_Linklist(listnode *list1, listnode *list2){ listnode *pc1, *pc2, *pc3,*list3; pc1 = (listnode*)malloc(sizeof(listnode)); pc2 = (listnode*)malloc(sizeof(listnode)); pc3 = (listnode*)malloc(sizeof(listnode)); pc1 = list1->next; pc2 = list2->next; pc3 = list1; list3 = pc3; while (pc1 != NULL && pc2 != NULL) { if (pc1->value <= pc2->value) { pc3->next = pc1; pc3 = pc3->next; pc1 = pc1->next; } else{ pc3->next = pc2; pc3 = pc3->next; pc2 = pc2->next; } } if (pc1 == NULL) pc3->next = pc2; if (pc2 == NULL) pc3->next = pc1; free(list2); return list3;}void Insert_List(listnode* head, int a, int i){ listnode *pc; listnode *s; pc = head->next;//令pc指向第一个元素 int j = 1; while (pc != NULL && j < i) { pc = pc->next; //pc后移动 j++; } if (pc == NULL) { printf("error\n"); exit(-1); } s = (listnode*)malloc(sizeof(listnode)); s->value = a; s->next = pc->next; pc->next = s;}//删除第i个元素void Delet_List(listnode* head, int i){ listnode *temp = NULL; int j = 1; //计数 head = head->next; while (head != NULL && j < i) { head = head->next; j++; } if (head == NULL) { printf("error\n"); exit(-1); } temp = head->next; head->next = temp->next; //head = head->next->next; free(temp);}
View Code

 

转载于:https://www.cnblogs.com/mrethan/p/4110099.html

你可能感兴趣的文章
重构视角(摘抄)
查看>>
【H5 音乐播放实例】第一节 音乐详情页制作(1)
查看>>
listView注意的地方
查看>>
Filter案例
查看>>
装饰器与子类化
查看>>
学习笔记(六)——数据表的查找功能、数据行、数据列的综合应用
查看>>
Java集合中List的Sort()方法进行排序
查看>>
JS制作一个通用的商城版历史浏览记录
查看>>
浴谷金秋线上集训营 T11738 伪神(树链剖分)
查看>>
javascript基础01
查看>>
iOS开发个人独立博客收集
查看>>
JSONArray和JSONObject的简单使用
查看>>
北京大片《全球热死》正在上映!
查看>>
多进程复习
查看>>
Centos 安装golang beego
查看>>
JavaScript内置对象 以及和 内置对象相关的语法
查看>>
framespacing="10"和border="10"在frameSet中有什么区别?
查看>>
JavaScript中的字符串连接
查看>>
函数定义的三种方式
查看>>
【Java设计模式】java单例模式
查看>>