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
- C代码实现非循环单链表
- C语言线性非循环单链表
- 数据结构(C实现)------- 顺序队列(非循环队列)
- C语言使用非循环双向链表实现队列
- c语言实现循环单链表
- C代码实现:操作循环链表按规则移除结点
- (七)链表----非循环单链表常用算法实现
- 1.非循环单链表
- 非循环单链表
- 循环单链表的实现代码C++
- C语言实现双向非循环链表(不带头结点)的基本操作
- C语言实现双向非循环链表(不带头结点)的逆序打印
- C语言实现双向非循环链表(不带头结点)的节点插入
- C语言实现双向非循环链表(不带头结点)的清空
- C实现头插法和尾插法来构建非循环双链表(不带头结点)
- C语言实现非循环双链表节点的删除(不带头结点)
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- C实现头插法和尾插法来构建双向非循环链表(带头结点尾结点)
- java反射技术详解
- Quartz框架 之 自学杂记(一)
- Android中数据存储(一)
- C代码实现数组
- Android 系列 5.3向OpenGL旋转立方体添加控件
- C代码实现非循环单链表
- Android进程间通讯之messenger
- Android进程间通讯
- tomcat解压版配置
- H5-初次认识
- C代码实现栈
- 欢迎使用CSDN-markdown编辑器
- eclipse中tomcat容器启动工程timeout问题解决
- android build.gradle学习