数据结构之链表
来源:互联网 发布:数据库查找通配符 编辑:程序博客网 时间:2024/06/15 00:01
头结点:第一个有效结点之前的那个结点; 头结点并不存有效数据;加头结点的目的主要是为了方便对链表的操作
头指针:指向头结点的指针变量尾指针:指向尾节点的指针变量
如果希望通过一个函数对链表进行处理,只需要一个参数:头指针
首先要定义一个单链表存储结构
然后建立一个空表,即初始化,我写的这个提前设置好了一个首结点和尾结点
向链表中插入元素,我直接进行了有序的插入,大致的想法就是新插入结点的值和已经插入的进行比较,若新插入结点的值小,则插入其中;若相等,则不插入;若大于,则指针向下一位移动。
搜索和删除功能在别的代码中测试成功,这代码没有体现出来
</pre></p><p></p><pre name="code" class="plain">#include<stdio.h>#include<stdlib.h>typedef struct linknode{int element;struct linknode* next;}LinkNode,*LinkPtr;LinkPtr initializeLinkList();LinkPtr createLinkList(int *paraArray, int arrayLength);void insertToNode(LinkPtr parahead, int paraElement);void printLinkList(LinkPtr parahead);int deleteNode(LinkPtr parahead, int val);int searchNode(LinkPtr parahead, int find);void testLinkList();//插入结点void insertToNode(LinkPtr parahead, int paraElement){LinkPtr p, q, r; //p代表前驱结点,q代表后继结点,r代表新插入结点p = parahead;q = parahead->next;printf("insert to list\n");r = (LinkPtr)malloc(sizeof(LinkNode));r->element = paraElement;r->next = NULL;while (q != NULL){if ((q->element) > (r->element)){r->next = q;p->next = r;break;}else if ((q->element) == (r->element)){free(r);break;}else{p = q;q = p->next;}}printf("insert success\n");printLinkList(parahead);}//初始化链表LinkPtr initializeLinkList(){LinkPtr head, tail;head = (LinkPtr)malloc(sizeof(LinkNode));tail = (LinkPtr)malloc(sizeof(LinkNode));head->element = -65535;tail->element = 65535;tail->next = NULL;head->next = tail;return head;}//创建链表LinkPtr createLinkList(int *paraArray, int arrayLength){LinkPtr head = initializeLinkList();printf("initializeLinkList success\r\n");printLinkList(head);printf("\n");int i;for (i = 0; i < arrayLength; i++){insertToNode(head, paraArray[i]);printf("\n");}return head;}//打印链表void printLinkList(LinkPtr parahead){LinkPtr head = parahead;while (head != NULL){printf("%d ", head->element);head = head->next;}}//删除结点int deleteNode(LinkPtr parahead, int val){int num = 1;LinkPtr p = parahead;while ((p != NULL) && (num < val)){p = p->next;num++;}if ((p != NULL)&&(num==val)){LinkPtr r = p->next;p->next = r->next;free(r);return 1;}else{printf("NOT FOUND");return 0;}}//查找结点int searchNode(LinkPtr parahead, int find){LinkPtr p = parahead;int i = 1;while ((p != NULL) && (i < find)){p = p->next;i++;}if ((p != NULL) && (i == find)){return p->element;}return 0;}void testLinkList(){int tempArray[] = { 5, 7, 5, 8, 3 };LinkPtr tempList = createLinkList(tempArray, 5);}void main(){testLinkList();}
![](file:///C:\Users\wangxiaojun\AppData\Roaming\Tencent\Users\594092877\QQ\WinTemp\RichOle\ISA}[O8BIGCG3HF~8[_QM5C.png)
0 0
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据结构之链表
- 数据库 shard 分片存储
- CityEngine CGA语法之金字塔式屋顶函数 roofPyramid
- POJ1887 Testing the CATCHER
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- secureCRT中无法删除字符的问题
- 数据结构之链表
- 欢迎使用CSDN-markdown编辑器
- Android 学习资源分享:官方示例Support-V7 Demos
- DFS应用——找出无向图的割点
- Linux chmod命令详解
- Python之自动生成解析ini文件的C++类(基于libiniparser.a)
- PHP程序中的日期和时间
- 华为oj 字符统计
- Linux-CentOS安装mysql5.6