博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表算法演示(郝斌)
阅读量:5092 次
发布时间:2019-06-13

本文共 3890 字,大约阅读时间需要 12 分钟。

1 /*  2     list.c  3     代码是在看视频时跟着敲的,如有错误请指正  4     用的编译器:c-free  5 */  6 #include
7 #include
8 #include
9 10 typedef struct Node 11 { 12 int data;// 数据域 13 struct Node * pNext;//指针域 14 }NODE, *PNODE;//NODE等价于struct Node PNODE等价于struct Node * 15 PNODE create_list(void); 16 void traverse_list(PNODE phead); 17 bool is_empty(PNODE pHead); 18 int length_list(PNODE); 19 bool insert_list(PNODE,int,int);//在pHead所指向链表的第pos个节点的前面 插入一个新的结点,该节点的值是val ,并且pos的值是从1开始 20 bool delete_list(PNODE,int,int *); 21 void sort_list(PNODE); 22 23 int main(void) 24 { 25 PNODE pHead = NULL; //等价于 struct Node * pHead = NULL; 26 int val; 27 28 pHead = create_list();//创建一个非循环单链表 29 traverse_list(pHead); 30 31 //insert_list(pHead, 4, 33); 32 if(delete_list(pHead, 4, &val)) 33 { 34 printf("删除成功,您删除的元素是:%d\n",val); 35 } 36 else 37 { 38 printf("删除失败!你删除的元素不存在!\n"); 39 } 40 traverse_list(pHead); 41 //int len = length_list(pHead); 42 // printf("链表的长度是%d\n",len); 43 44 //sort_list(pHead); 45 //traverse_list(pHead); 46 /*if (is_empty(pHead)) 47 printf("链表为空!\n"); 48 else 49 printf("链表不空!\n"); 50 */ 51 return 0; 52 53 } 54 55 PNODE create_list(void) 56 { 57 int len;//用来存放有效节点的个数 58 int i; 59 int val;//用来临时存放用户输入的结点的值 60 61 //分配 了一个不存放有效数据的头结点 62 PNODE pHead = (PNODE)malloc(sizeof(NODE)); 63 if(NULL == pHead) 64 { 65 printf("分配失败,程序终止!\n"); 66 exit(-1); 67 } 68 PNODE pTail = pHead; 69 pTail->pNext = NULL; 70 71 printf("请输入你需要生成的链表节点数:len = "); 72 scanf("%d", &len); 73 74 for(i=0; i
data = val; 86 pTail->pNext = pNew; 87 pNew->pNext = NULL; 88 pTail = pNew; 89 } 90 91 return pHead; 92 } 93 94 void traverse_list(PNODE pHead) 95 { 96 PNODE p = pHead->pNext; 97 98 while(NULL != p) 99 {100 printf("%d ", p->data);101 p = p->pNext;102 } 103 printf("\n");104 105 return;106 }107 108 bool is_empty(PNODE pHead)109 {110 if(NULL == pHead->pNext)111 return true;112 else113 return false;114 115 }116 int length_list(PNODE pHead)117 {118 PNODE p = pHead->pNext;119 int len = 0;120 121 while (NULL != p)122 {123 ++len;124 p = p->pNext;125 }126 return len; 127 }128 129 void sort_list(PNODE pHead)130 {131 int i, j, t;132 int len = length_list(pHead);133 PNODE p, q;134 135 for(i=0,p=pHead->pNext; i
pNext)136 {137 for(j=i+1,q=p->pNext; j
pNext)138 {139 if(p->data > q->data)//类似于数组中的 a[i] > a[j]140 {141 t = p->data;//类似于数组中的:t = a[i]; 142 p->data = q->data;//类似于数组中的:a[i] = a[j]; 143 q->data = t;//类似于数组中的 a[j] = t; 144 }145 }146 }147 }148 149 //在pHead所指向链表的第pos个节点的前面 插入一个新的结点,该节点的值是val ,并且pos的值是从1开始 150 bool insert_list(PNODE pHead,int pos,int val)151 {152 int i = 0;153 PNODE p = pHead;154 155 while (NULL != p && i
pNext;158 ++i;159 } 160 if(i>pos-1 || NULL==p)161 return false;162 163 PNODE pNew = (PNODE)malloc (sizeof(NODE)); 164 if(NULL == pNew)165 {166 printf("动态内存分配失败!\n");167 exit(-1);168 }169 pNew->data = val;170 PNODE q = p->pNext;//q的作用就是临时temp变量171 p->pNext = pNew;172 pNew->pNext = q;173 174 return true;175 }176 177 bool delete_list(PNODE pHead,int pos,int *pVal)178 {179 int i = 0;180 PNODE p = pHead;181 182 while (NULL != p->pNext && i
pNext;185 ++i;186 } 187 if(i>pos-1 || NULL==p->pNext)188 return false;189 190 PNODE q = p->pNext;191 *pVal = q->data;192 193 //删除p节点后面的结点 194 p-> pNext = p->pNext->pNext;195 free(q);196 q = NULL;197 198 return true; 199 }

 

转载于:https://www.cnblogs.com/huangtao1996/p/4827296.html

你可能感兴趣的文章
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
jQuery.form.js使用
查看>>
(转)linux sort,uniq,cut,wc命令详解
查看>>