链表基本操作
2015-10-18 18:32
323 查看
转载自http://blog.csdn.net/h971379154/article/details/48860495
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct node{ int data;//数据域 struct node *pNext;//指针域 }Node,*pNode; // Node<=>struct node pNode<=>struct node * 即指向node类型的指针 pNode create_list(void); void trverse_list(pNode pHead); bool is_empty(pNode pHead); int length_list(pNode pHead); void sort_list(pNode pHead); bool insert_list(pNode pHead,int pos,int val); bool delete_list(pNode pHead,int pos,int *pVal); pNode Reverse(pNode phead); int main(void) { int length; int val; pNode pHead=NULL; pHead=create_list(); trverse_list(pHead); /* if( is_empty(pHead) ) { printf("链表为空\n"); } else { printf("链表非空\n"); }*/ /* length=length_list(pHead); printf("链表长度为%d\n",length); sort_list(pHead); trverse_list(pHead); //insert_list(pHead,4,90); if(delete_list(pHead,2,&val)) { printf("删除元素成功,删除的元素值为%d\n",val); } else { printf("删除失败\n"); } trverse_list(pHead); */ pNode pNewHead=Reverse(pHead); trverse_list(pNewHead); return 0; } pNode Reverse(pNode phead) { pNode prev=NULL; pNode next; while(phead) { next = phead->pNext; phead->pNext=prev; prev = phead; phead = next; } pNode p =(pNode)malloc(sizeof(Node)); p->pNext=prev; prev = p; return prev; } pNode create_list(void) { int len;//存放链表长度 int val;//存放没个节点数据域值 //创建头节点 pNode pHead=(pNode)malloc(sizeof(Node)); //创建失败处理 if(NULL==pHead) { printf("分配失败,程序终止\n"); exit(-1); } //创建中间变量,始终指向尾节点 pNode pTail=pHead; pTail->pNext=NULL;//设置头节点为尾节点 printf("输入要生成链表的长度 len="); scanf("%d",&len); //添加新节点 for(int i=0;i<len;i++) { printf("请输入第%d个节点值\n",i+1);//有效节点从头节点后面节点开始 scanf("%d",&val); pNode pNew=(pNode)malloc(sizeof(Node));//创建新节点 if(NULL==pNew)//创建新节点失败处理 { printf("分配失败,程序终止\n"); exit(-1); } pNew->data=val; pTail->pNext=pNew; pNew->pNext=NULL; pTail=pNew; } return pHead; } void trverse_list(pNode pHead)//对要遍历的链表进行遍历 { pNode p=pHead->pNext; while(NULL!=p) { printf("%d ",p->data); p=p->pNext; } printf("\n"); } bool is_empty(pNode pHead) { if(NULL==pHead->pNext) return true; else return false; } int length_list(pNode pHead) { int length=0; pNode p=pHead->pNext; while(NULL!=p) { p=p->pNext; length++; } return length; } void sort_list(pNode pHead) { int i,j,t; pNode p,q; int len; len=length_list(pHead); for(i=0,p=pHead->pNext;i<len-1;i++,p=p->pNext) for(j=i+1,q=p->pNext;j<len;j++,q=q->pNext) { if(p->data>q->data) { t=p->data; p->data=q->data; q->data=t; } } } bool insert_list(pNode pHead,int pos,int val) { int i=0; pNode p=pHead; while(NULL!=p && i<pos-1) { p=p->pNext; i++; } if(i>pos-1 || NULL==p)//要插入的位置大于链表长度 return false; pNode pNew = (pNode)malloc(sizeof(Node)); if(NULL==pNew) { printf("为新插入节点分配内存失败\n"); exit(-1); } pNew->data=val; pNode q=p->pNext; p->pNext=pNew; pNew->pNext=q; return true; } bool delete_list(pNode pHead,int pos,int * pVal) { int i=0; pNode p=pHead; while(NULL!=p->pNext && i<pos-1) { p=p->pNext; i++; } if(i>pos-1 || NULL==p->pNext)//要插入的位置大于链表长度 return false; pNode q=p->pNext; *pVal=q->data; p->pNext=p->pNext->pNext; free(q); q=NULL; return true; }
相关文章推荐
- web服务器和应用服务器的区别
- html5视频播放解决方案
- 打印网页怎样去除不想要的元素
- NOI题库刷题日志 (贪心篇题解)
- 编程技巧:使用整数同时进行多个true|false判断
- 题目10:MySQL---------Rising Temperature
- <草稿>.bash_profile/.bash_login/.profile的区别联系
- Linux集群部署系列(五):Hadoop 2.x完全分布式集群部署
- Linux以下银行乱码
- javascript于boolean类型转换,运营商&&和|| 返回值
- cocos2d-x于android在call to OpenGL ES API with no current context
- Java学习笔记之_JDBC
- phpStorm生成php文件不是utf-8格式
- arm-linux-gcc 安装
- Linux下的make命令用法
- 20135316王剑桥 linux第五周课实验笔记
- hdoj4906 Our happy ending(2014 Multi-University Training Contest 4)
- 机器学习 & python k-近邻算法处理手写识别系统
- "旋转的风车"----windows(GDI)绘图
- Eclipse配置Hibernate