链表
来源:互联网 发布:信息流优化师招聘 编辑:程序博客网 时间:2024/06/05 20:21
<pre name="code" class="cpp">#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*//函数声明PNODE creat_list(void);//创建 void traverse_list(PNODE pHead);//遍历bool is_empty(PNODE pHead);//判断是否为空 int length_list(PNODE);//链表的长度 bool insert_list(PNODE,int,int);//插入节点 bool delete_list(PNODE,int,int*);//删除节点 void sort_list(PNODE); //排序 int main(void){PNODE pHead = NULL;//等价于 struct Node*pHead=NULL,头指针? int val;pHead = creat_list();//创建一个非循环单链表 ,并将该链表的头结点的地址付给pHead traverse_list(pHead);//遍历 //int len=length_list(pHead);//printf("链表的长度是%d\n",len);//sort_list(pHead);/*if(is_empty(pHead))printf("链表为空!\n"); elseprintf("链表不空!");*///insert_list(pHead,3,33);if(delete_list(pHead,4,&val)){printf("删除成功!\n");}else{printf("删除失败!\n");} traverse_list(pHead);//插入节点后再遍历 return 0;}PNODE creat_list(void){ int len;//用来存放有效节点的个数 int i; int val;//用来临时存放用户输入的节点的值 //分配了一个不存放有效数据的头结点 PNODE pHead=(PNODE)malloc(sizeof(NODE)); if(NULL==pHead) { printf("分配失败,程序终止!\n"); exit(-1); } PNODE pTail=pHead;//pTail是一个结构体指针, pTail->pNext=NULL; printf("请输入您需要生成的链表节点个数:len="); scanf("%d",&len); for(i=0;i<len;i++) { printf("请输入第%d个节点的值:",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 traverse_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){PNODE p=pHead->pNext;int len=0;while(NULL!=p){ ++len; p=p->pNext;}return len;}void sort_list(PNODE pHead){ int i,j,t; int len=length_list(pHead); PNODE p,q; 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; } } } return;} //在pHead所指向链表的第pos个节点的前面插入一个新的节点,该节点的值为val,并且pos从1开始 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节点后面的节点 p->pNext=p->pNext->pNext; free(q); q=NULL; return true;}
0 0
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 仿58同城加载动画
- Android应用OneAPM测评
- oscar数据库以及oracle数据库quartz调度方式
- Core Animation编程指南
- Inno Setup制作实例:Inno Setup安装服务的代码
- 链表
- security用法
- Google chrome 支持 IE 版本的 系统
- STL 源码分析第二章: 空间配置器理解
- [已解决问题]android sdk Content Loader's has encountered a problem
- warning:deprecated conversion from string constant to 'char *'解决方案
- 数据和界面显示分开
- Lua学习笔记之协同程序
- 堆栈