链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
来源:互联网 发布:淘宝开店培训班 平顶山 编辑:程序博客网 时间:2024/05/22 03:09
由于考试需要,复习一下单链表的各种常见操作,直接上代码+注释,需要的可以参考下哈~
Code:
#include<iostream>using namespace std;typedef struct student{int data;struct student *next;}node;//创建单链表node *create(){node *head, *p, *s;int x;head = (node *)malloc(sizeof(node));//先创建一个头节点,便于头指针的操作。p = head;printf("\nInput the data (end with '0') : ");while(1){if(scanf("%d", &x) != EOF && x != 0){//如果输入数据合法,则再创建一个节点;否则跳出循环。s = (node *)malloc(sizeof(node));s->data = x;p->next = s;p = s;}else break;}head = head->next;p->next = NULL;return head;}//计算单链表长度int length(node *head){int n = 0;while(head != NULL){head = head->next;n++;}return n;}//打印单链表void print(node *head){int n = length(head);printf("Output the list (%d records~) : ", n);while(head != NULL){printf(head->next == NULL ? "%d\n" : "%d->", head->data);head = head->next;}}//删除单链表节点node *del(node *head, int num){node *p1, *p2;if(head == NULL) return NULL;p1 = head;while(num != p1->data && p1->next != NULL){//若当前指针所存储的值与要删除的值不符,则向后遍历,直至相等或至最后一个节点。p2 = p1;p1 = p1->next;}if(num == p1->data){//如果链表中存在要删除的节点,则分两种情况:在头节点处或链表中。if(head == p1) head = p1->next;else p2->next = p1->next;free(p1);//别忘了释放删除的节点哦~节约点~}else printf("There is no '%d' \n", num);//找不到要删除的值。return head;}//插入单链表节点node *insert(node *head, int num){node *p1, *p2, *p3;p2 = head;p1 = (node *)malloc(sizeof(node));//先将要插入的节点申请下~p1->data = num;//思路同删除节点操作while(num > p2->data && p2->next != NULL) {p3 = p2;p2 = p2->next;}if(num <= p2->data){if(head == p2){p1->next = p2;head = p1;}else{p3->next = p1;p1->next = p2;}}else {//此处要细心,别忘了可以在尾部插入节点。p2->next = p1;p1->next = NULL;}return head;}//单链表排序node *sort(node *head){node *p;p = head;int n, temp;n = length(head);//运用冒泡排序似乎对链表排序来说是最方便的~(递增)for(int j = 1; j < n; j++){p = head;for(int i = 0; i < n - j; i++){if(p->data > p->next->data){temp = p->data;p->data = p->next->data;p->next->data = temp;}p = p->next;}}printf("\nAfter sorting ~\n");return head;}//单链表逆置node *reverse(node *head){node *p1, *p2, *p3;p1 = head;p2 = p1->next;if(head == NULL || head->next == NULL) return head;//逆置的思想:选出三个节点(第三个可能是NULL),操作前两个节点,使其逆置,而后按同样做法操作第二、三个节点和第四个节点~while(p2 != NULL){p3 = p2->next;p2->next = p1;p1 = p2;p2 = p3;}head->next = NULL;head = p1;printf("\nAfter reversing ~\n");return head;}int main(){node *head;//创建单链表head = create();print(head);//排序head = sort(head);print(head);//删除单链表int numD;printf("\nInput the value you want to delete : ");scanf("%d", &numD);head = del(head, numD);print(head);//插入单链表int numS;printf("\nInput the value you want to insert : ");scanf("%d", &numS);head = insert(head, numS);print(head);//逆置head = reverse(head);print(head);return 0;}运行示例:
Ps:仅供参考哈~
14 0
- 链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
- 带头结点单链表的基本操作(创建、测长、打印、插入、删除、取值、合并、排序、逆置)
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的建立,测长,打印,删除,插入,排序,逆置
- 单链表的创建、遍历、测长、插入、删除、访问、排序、逆序
- 单链表的创建、测长、打印、插入、删除、排序及逆置
- 线性表---单链表(创建、插入、删除、排序、测长和打印输出)
- 单链表的创建、测长、打印、插入和删除
- C语言单链表的创建、插入、查找、删除、求长、排序、遍历
- 使用JAVA实现单链表的建立、测长、打印、删除、插入、排序、逆置
- 【数据结构】单链表的建立,测长,打印,删除,插入, 排序, 逆置
- 链表创建、测长、打印、删除元素、插入、排序、逆置
- 双链表的创建、测长、打印、插入和删除
- 双链表的创建、遍历、测长、插入、删除、销毁
- 单链表的创建,删除,插入,显示,排序
- 单链表的创建,删除,插入,排序
- 自整的面试题目及代码---单链表的创建、测长、打印、删除、插入
- 黑马程序员之java编程基础2
- 递归调用的确定
- C++ 多线程同步相关
- 反思:IT部门在企业中的位置,IT人的地位,IT的价值
- 从程序员到技术总监,分享10年开发经验
- 链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
- Android开源项目SlidingMenu深入剖析
- 模板函数的定义和声明须在同一文件内
- static与final修饰类属性及初始化问题
- 防sql注入,将特殊字符转换成%20
- 使用正则表达式自动为文本中的url地址生成链接
- OpenCV中文网站例程——轮廓检测(能检测任意输入图像的轮廓)
- 30岁Lady的8年尴尬IT人生
- 17家中国初创IT公司的失败史