//带头结点的单链表

#include<iostream>

using namespace std;

typedef struct student

{

       int data;

       struct student *next;

}node;

node * creat()                          //创建单链表

{

       node *head,*p,*s;

       int x,cycle=1;

       head=(node *)malloc(sizeof(node));

       p=head;

 

       while(cycle)

       {

 

              cout<<"请输入一直不为0的数,输入0则结束"<<endl;

              cin>>x;

              if(x!=0)

              {

                     s=(node *)malloc(sizeof(node));

                     s->data=x;

                     p->next=s;

                     p=s;

              }

              else cycle=0;

 

       }

       p->next=NULL;

       return head;

}

int listLength(node *head)                        //单链表的测长

{

       int i=0;

       node *p=head;

       p=head;

              do

              {

                     p=p->next;

                i++;

 

              }while(p->next!=NULL);

              return i;

}

void printList(node *head)                       //打印单链表

{

       node *p=head->next;

       int len=listLength(head);

       for(int i=0;i<len;i++)

       {

              cout<<p->data<<endl;

              p=p->next;

       }

}

node * deleteNode(node *head,int e)                          //删除单链表的结点

{

       node *p1,*p2;

       p1=head->next;

       while(p1->data!=e && p1->next!=NULL)

       {

              p2=p1;

              p1=p1->next;

       }

       if(e==p1->data)

       {

              if(p1==head->next)

              {

                     head->next=p1->next;

                     free(p1);

              }

              else

              {

                     p2->next=p1->next;

                     free(p1);

              }

 

       }

       else

              cout<<"未找到结点的数据域值为:"<<e<<"的结点"<<endl;

       return head;

 

}

node * insert(node *head,int e)   //链表插入一个结点

{

       node *p1,*p2,*s;

       p1=head->next;

       s=(node *)malloc(sizeof(node));

       s->data=e;

       while(s->data > p1->data && p1->next!=NULL)

       {

              p2=p1;

              p1=p1->next;

       }

       if(s->data < p1->data)

       {

              if(p1==head->next)

              {

                     s->next=p1;

                     head->next=s;

              }

              else

              {

                     s->next=p1;

                     p2->next=s;

              }

       }

       else

              p1->next=s;

       s->next=NULL;

       return head;

}

int main()

{

       node *head;

       head=creat();

       printList(head);

       head=insert(head,3);

    printList(head);

       return 0;

}

转载于:https://www.cnblogs.com/this-543273659/archive/2011/08/03/2126157.html

对 带头结点的单链表 的操作相关推荐

  1. 带头结点的单链表的操作(C语言)

    初始化 先了解头结点 头结点是一个特殊的结点,它的数据域不存储信息,通常情况下,头指针指向的结点为头结点,由于头结点不存储信息,所以不是数据结构中的实际结点,第一个实际结点其实是head->ne ...

  2. 带头结点的单链表删除操作 (10 分)

    本题要求实现删除单链表的第i个元素结点,删除成功返回1,否则返回0. 函数接口定义: int delete_link ( LinkList L,int i); L为单链表的头指针,i为删除结点的序号. ...

  3. 【C站水库】带头结点的单链表的操作

    题目: 代码: #include<bits/stdc++.h> #define ph print(head) using namespace std; struct node{int va ...

  4. c语言实现--不带头结点的单链表操作

    1,不带头结点的单链表操作中,除了InitList(),GetElem(),ListInsert(),ListDelete()操作与带头结点的单链表有差别外,其它的操作基本上一样. 2,不带头结点单链 ...

  5. 不带头结点的单链表操作

    不带头结点的单链表操作,包括插入.遍历.统计结点数等,要求写出数据结构算法思想及C语言实现函数 本文为博主原创文章,未经博主允许不得转载. 版权为陈博超所有,第一次于2021年06月22日发表于BLO ...

  6. 带头结点的单链表的逆置

    代码 //带头结点的单链表逆置.cpp #include<iostream> using namespace std; struct Node{ int data; Node* next; ...

  7. 【C语言】数据结构C语言版 实验3 带头结点的单链表

    slnklist.h #include <stdio.h> #include <stdlib.h> /************************************* ...

  8. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

  9. 带头结点的单链表的初始化,建立,插入,查找,删除

    //带头结点的单链表的初始化,建立,插入,查找,删除     #include <stdio.h>     #include <stdlib.h> typedef int El ...

最新文章

  1. (0063)iOS开发之SVN server的搭建
  2. android test.apk,app-debug.apk和app-debug-androidTest.apk在安装macaca-android模块的时候build失败...
  3. 关于arm-linux-gcc的安装与配置
  4. Linux命令修复方法,在Linux终端运行sudoedit -s /命令看未修复和已修复的效果
  5. 扎实的基础是成功的法宝
  6. BatchNorm中forward未被调用原因
  7. 用户管理实用命令(第二版)
  8. CNN中全连接层是什么样的
  9. Uploadify jquery+flash+UploadHandler.ashx .(用)
  10. java冒泡排序_Java专题(二):Java中常见的排序算法有哪些?---冒泡排序
  11. 关于Java浮点数运算精度丢失问题
  12. Oracle 多表查询
  13. 使用FlashFTP上传文件到指定服务器
  14. Windows修改键盘映射
  15. 全局最小割集Stoer-Wagner算法
  16. Excel 绘制 人口年龄结构树状图
  17. oracle物理备份与恢复,ORACLE数据库备份与恢复详解
  18. JPEG文件二进制格式分析
  19. java 数字拆分_如何在java中分割数字?
  20. 计算机毕业设计ssm东湖爱心系统的众筹设计和实现t4a84系统+程序+源码+lw+远程部署

热门文章

  1. LeetCode 717. 1比特与2比特字符
  2. LeetCode 284. 顶端迭代器
  3. LeetCode 1346. 检查整数及其两倍数是否存在(哈希)
  4. 谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!
  5. 追剧计划第三弹!UC Berkeley出品,全栈深度学习!
  6. 美团NLP中心算法实习生内推啦!
  7. step-by-step: 夕小瑶版神经网络调参指南(上)
  8. 深入浅出不可思议的中文分词技术
  9. 细说ReactiveCocoa的冷信号与热信号(一)
  10. 论文浅尝 | 一种用于新闻推荐的深度知识感知网络