C代码实现非循环单链表

来源:互联网 发布:佛山js防水材料 编辑:程序博客网 时间:2024/06/05 23:04
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("\n"); 32     printf("链表的结点为%d个\n",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("动态分配内存失败!\n"); 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("申请内存失败\n");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("申请内存失败\n");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("链表为空\n");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  

 

0 0
原创粉丝点击