zoukankan      html  css  js  c++  java
  • C代码实现非循环单链表

    C代码实现非循环单链表,

    直接上代码。

      1 # include <stdio.h>
      2 # include <stdlib.h>
      3 # include <malloc.h>
      4 //C代码实现非循环单链表 
      5 
      6 //定义链表结点
      7 typedef struct Node{
      8     int data;//数据域
      9     struct Node* pNext;//指针域 
     10 }* PNODE,NODE; 
     11 
     12 //函数声明
     13  PNODE initHead(void);
     14  void init(PNODE pHead) ;
     15  bool isEmpty(PNODE pHead);
     16  void traverse(PNODE pHead);
     17  int length(PNODE pHead) ;
     18  bool insert(PNODE pHead,int pos,int num);
     19  bool delete_linked(PNODE pHead,int pos);
     20  
     21 int main(void)
     22 {
     23     //确定一个非循环链表只需要一个头结点 
     24     PNODE pHead;
     25     //初始化头结点
     26     pHead = initHead(); 
     27     //给链表赋值
     28     init(pHead);
     29      //遍历
     30     traverse(pHead) ;
     31     printf("
    ");
     32     printf("链表的结点为%d个
    ",length(pHead));
     33 //    insert(pHead,3,99);
     34     delete_linked(pHead,3);
     35     traverse(pHead) ;
     36     return 0;
     37 }
     38 
     39 //向链表中某个位置增加一个结点 pos>=1
     40 bool insert(PNODE pHead,int pos,int num)
     41 {
     42     int i = 0;
     43     PNODE tem = pHead;
     44     //让tem指向第POS-1个节点
     45     while(NULL!=tem&&i<pos-1) {
     46         tem = tem->pNext;
     47         i++;
     48     }
     49     if(i>pos-1||NULL==tem){
     50         return false;
     51     }
     52     //分配一个新的结点
     53     PNODE pNode = (PNODE)malloc(sizeof(NODE));
     54     if(NULL==pNode){
     55         printf("动态分配内存失败!
    ");
     56         exit(-1);
     57     }
     58     pNode->data = num;
     59     //第一种方式
     60 //    pNode->pNext = tem->pNext;
     61 //    tem->pNext = pNode;
     62 //    第二种方式 
     63     PNODE p = tem->pNext;
     64     tem->pNext = pNode;
     65     pNode->pNext = p;
     66     return true;
     67 }
     68 
     69 //删除指定位置的值 
     70 bool delete_linked(PNODE pHead,int pos)
     71 {
     72     int i = 0;
     73     PNODE tem = pHead;
     74     //让tem指向第POS-1个节点
     75     while(NULL!=tem&&i<pos-1) {
     76         tem = tem->pNext;
     77         i++;
     78     }
     79     if(i>pos-1||NULL==tem){
     80         return false;
     81     }
     82     PNODE p = tem->pNext;
     83     tem->pNext = p->pNext;
     84      free(p);
     85     return true;
     86 }
     87     
     88 //链表长度
     89 int length(PNODE pHead) 
     90 {
     91     int count = 0;
     92     PNODE tem = pHead->pNext;
     93     while(NULL!=tem){
     94         count++;
     95         tem = tem->pNext;
     96     }
     97     return count;
     98 }
     99 
    100 //初始化头结点
    101 PNODE initHead(void)
    102 {
    103     PNODE pHead = (PNODE)malloc(sizeof(NODE));
    104     if(NULL==pHead){
    105         printf("申请内存失败
    ");
    106         exit(-1);
    107     }
    108     return pHead;
    109 }
    110 
    111 //给链表赋值
    112 void init(PNODE pHead) 
    113 {
    114     int num;//结点的值
    115     int len;//结点的个数
    116     printf("请输入结点的个数len= ");
    117     scanf("%d",&len);
    118     int i;
    119     PNODE tem = pHead;
    120     for(i = 0;i<len;i++){
    121         PNODE node = (PNODE)malloc(sizeof(NODE));
    122         if(NULL==node){
    123             printf("申请内存失败
    ");
    124             exit(-1);
    125         }
    126         printf("请输入第%d个节点的值 ",i+1);
    127         scanf("%d",&num);
    128         node->data = num;
    129         tem->pNext = node;
    130         node->pNext = NULL;
    131         tem = node;
    132     }
    133 }
    134 
    135 //判断链表是否为空
    136 bool isEmpty(PNODE pHead)
    137 {
    138     return (NULL==pHead->pNext);
    139 }
    140 
    141 //遍历链表
    142 void traverse(PNODE pHead)
    143 {
    144     if(isEmpty(pHead)){
    145         printf("链表为空
    ");
    146         return;
    147     }
    148     PNODE tem = pHead->pNext;
    149     while(NULL!=tem){
    150         printf("%d ",tem->data);
    151         tem = tem->pNext;
    152     }
    153 }
    154 
    155  
  • 相关阅读:
    解决tmux在PuTTY下工作异常的问题
    使用 Tmux 强化终端功能
    Redis的五种数据结构
    Kubernetes(k8s) docker集群搭建
    C# 正则表达式大全
    C#异步编程(async and await)及异步方法同步调用
    ASP.NET MVC同时支持web与webapi模式
    ActiveX IE保护模式下的低权限操作路径及Windows操作系统特殊路径
    C#文件夹权限操作工具类
    C#创建文件夹并设置权限
  • 原文地址:https://www.cnblogs.com/makaruila/p/4869493.html
Copyright © 2011-2022 走看看