插入算法和删除演示:
#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> typedef struct Node { int data; //数据域 struct Node * pNext; //指针域 }Node, *pNode; //函数声明 pNode create_list(); void traverse_list(pNode pHead); //遍历 bool is_empty(pNode pHead); //判断链表是否为空 int length_list(pNode pHead); //链表的长度 bool insert_list(pNode, int, int); //插入 第一个参数表示插入的链表 第二个参数表示插入的位置 第三个参数表示插入的元素 bool delete_list(pNode, int, int *); //第一个参数表示要删除的位置,第二个参数表示要删除的位置 第三参数表示删除的元素的地址放入指针 void sort_list(pNode pHead); int main(void) { pNode pHead = NULL; //等价于 struct Node *pHead=NULL pHead = create_list(); //create_list()创建一个非循环单链表,并将该链表的头结点的地址赋给pHead traverse_list(pHead); //遍历输出 /** int len = length_list(pHead); printf("链表的长度%dn", len); sort_list(pHead); //选择排序 traverse_list(pHead); //遍历输出 */ insert_list(pHead, 4, 33); traverse_list(pHead);//遍历输出 int val; if (delete_list(pHead, 4, &val)) { printf("删除成功,删除的元素%d:n",val); }else { printf("删除失败,删除的元素不存在%d:n",val); } traverse_list(pHead);//遍历输出 while(true){} return 0; } //创建单链表 pNode create_list() { int len; //用来存放有效节点数 int i; int val; //存放用户临时输入的节点数据 //我们首先要先生成一个头结点 不存放有效数据 pNode pHead = (pNode)malloc(sizeof(Node)); if (NULL == pHead) { printf("内存分配失败"); //程序退出 exit(-1); } pNode pTail = pHead; //pTail也指向了头结点 pTail->pNext = NULL; printf("请输入你要输入节点的个数 len ="); scanf_s("%d", &len); //假设输入的长度5,我们需要循环 for ( i = 0; i < len; i++){ printf("请输入第%d个节点的值:", i + 1); scanf_s("%d", &val); pNode pNew=(pNode)malloc(sizeof(Node)); if (NULL == pNew) { printf("内存分配失败"); //程序退出 exit(-1); } pNew->data = val; //pHead->pNext = pNew; //pNew->pNext = NULL; pTail->pNext = pNew; //将这个新节点挂到尾节点 pNew->pNext = NULL; pTail = pNew; } return pHead; } //遍历 void traverse_list(pNode pHead) { pNode p = pHead->pNext; while (p!=NULL){ printf("%d ",p->data); p = p->pNext; } //换行 printf("n"); return; } //判断链表是否为空 bool is_empty(pNode pHead) { if (NULL == pHead->pNext) { return true; }else { return false; } } //求一个链表的长度 int length_list(pNode pHead) { pNode p=pHead->pNext; //第一个节点 int len = 0; while (NULL != p) { //只要指针指向的下一个元素不是空,指针就继续向后移动 ++len; p=p->pNext; } return len; } //排序算法 void sort_arr(pNode pHead) { int i, j, tmp; int arr[6] = { 5,8,45,2,9,3 }; int len=length_list(pHead); //获取链表长度 pNode p, q; for (i = 0; i < len-1; i++){ for (j = i+1; j < len; j++){ } } } //选择排序 从小到大排 void sort_list(pNode pHead){ int i,j,t; int len = length_list(pHead); //获取链表长度 pNode p,q; for (i = 0, p = pHead->pNext; i < len - 1; ++i, p = p->pNext){ for (j = i + 1, q = p -> pNext; j < len; ++j, q = q->pNext) { if (p->data > q->data) { //类似于 数组中的: a[i] > a[j] t = p->data; //类似于数组中的: t = a[i]; p->data = q->data; //类似于数组中的: a[i] = a[j]; q->data = t; // 类似于数组中的: a[j] = t; } } } } //在pHead所指向链表的第pos个节点的前面插入-一个新的结点,该节点的值是val,并 且pos的值是从1开始 bool insert_list(pNode pHead, int pos, int val) { int i = 0; pNode p = pHead; while (NULL != p && i < pos - 1) { p = p->pNext; ++i; } if (i > pos - 1 || NULL == p) { return false; } pNode pNew = (pNode)malloc(sizeof(Node)); if(NULL == pNew){ printf("动态分配内存失败!"); exit(-1); } pNew->data = val; //定义一个临时节点,数据交换存储 pNode tmp = p->pNext; p->pNext=pNew; pNew->pNext = tmp; return true; } bool delete_list(pNode pHead, int pos, int * val) { int i = 0; pNode p = pHead; while (NULL != p->pNext && i < pos - 1) { p = p->pNext; ++i; } if (i > pos - 1 || NULL == p->pNext) { return false; } pNode tmp=p->pNext; //将需要删除的节点临时保存起来 *val = tmp->data; p->pNext = p->pNext->pNext; //删除p节点后一个节点 free(tmp); tmp = NULL; return true; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算