单链表的创建、排序、逆置等
来源:互联网 发布:比特币钱包离线数据 编辑:程序博客网 时间:2024/04/29 03:50
#include<iostream>#include<cstdlib>using namespace std;//定义链表节点;typedef struct Node{ int data; Node*next;}node; //创建链表;node*Create_list(){ node *head; node*p; node*s; int x; head=(node*)malloc(sizeof(node)); p=head; int temp=1;cout<<"please enter the data,(entre '0' to end ):";
while(temp) { cin>>x; if(0!=x){ s=(node*)malloc(sizeof(node)); s->data=x; p->next=s; p=s;} else temp=0; } head=head->next; p->next=NULL; return head;}int length_list(node*head)//链表长度;{ int n=0; node*p=head; while(p!=NULL) { p=p->next; ++n;} return n;}void print_list(node*head)//打印链表;{ node*p; if(NULL==head) cout<<"this is null list !"; else p=head; while(NULL!=p) {cout<<p->data<<"\t"; p=p->next;} cout<<endl;}node*sort_list(node*head) //链表排序;{ node*p; int temp; int n=length_list(head); if(NULL==head||head->next==NULL) return head; else for(int j=1;j<n;++j)//使用冒泡排序; { p=head; for(int i=0;i<n-j;++i){ if(p->data>p->next->data) { temp=p->data; p->data=p->next->data; p->next->data=temp; } p=p->next; } } return head;}node*reverse_list(node*head) //链表逆置;{ node*p1,*p2,*p3; while((NULL==head)||(NULL==head->next)) return head; p1=head; p2=p1->next; p1->next=NULL; while(NULL!=p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } return p1;}//删除链表头元素;node*delete_headelement(node*head){ node*p=head; if(NULL==p||NULL==p->next) return NULL; else head=head->next; free(p); return head;}//提供一个单链表,不知道元素个数,只遍历一次,求中间元素;int middle_ele_list(node*head){ node*p1,*p2; p1=head; p2=head; while((p2->next!=NULL)&&(p2->next->next!=NULL)) { p2=p2->next->next; p1=p1->next; } return p1->data;}//求链表倒数第m个元素;int backwords_list(node*head,int m){ node*p=reverse_list(head); //先逆置链表; for(int i=1;i<m;++i) p=p->next; return p->data;}node*Merge_list(node*a,node*b) //将两个有序(升序)的链表连接后,仍然有序;{node*head=NULL;node*temp=NULL;if(a==NULL) return b;else if(b==NULL) return a;if(a->data>b->data){ head=b;b=b->next;}else{ head=a;a=a->next;}temp=head;while((a!=NULL)&&(b!=NULL)){ if((a->data)>(b->data)) {temp->next=b;temp=b;b=b->next; } else if(a->data<=b->data) {temp->next=a;temp=a;a=a->next; }}if(a==NULL) while(b!=NULL){ temp->next=b; temp=b; b=b->next;}else while(a!=NULL) {temp->next=a;temp=a;a=a->next; }temp->next=NULL;return head;}node*RecurrenceMerge(node*a,node*b)//递归 合并两个升序的链表,合并后仍有序;{if(a==NULL)return b;elseif(b==NULL) return a;node*head=NULL; if(a->data>b->data){head=b;head->next=RecurrenceMerge(a,b->next);}else{head=a;head->next=RecurrenceMerge(b,a->next);}return head;}
0 0
- 单链表的创建、排序、逆置等
- 单链表的常用操作,包括单链表的创建、插入、删除、排序、逆置以及打印输出等
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等
- string 动态双向链表的创建、排序,反转等
- 单链表的创建、插入、删除、排序以及逆置
- C语言 ---单链表创建、求长度、删除、排序等操作
- 单链表操作,创建,遍历,插入,删除,排序等操作
- 单链表的创建、插入、删除等操作
- 单链表的创建,插入删除等操作
- 单链表的创建、插入删除等操作
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- C语言中,链表的创建,插入,删除,遍历,求链表长度,排序等
- 链表的创建、插入、删除、排序和逆置
- 单链表的创建、测长、打印、插入、删除、排序及逆置
- 单链表的创建,删除,插入,显示,排序
- 单链表的创建,删除,插入,排序
- 链表的增删查改、排序、逆置等操作
- 异常:Missing artifact net.sf.json-lib:json-lib:jar:x.x.x:compile
- Fedora Linux,JDK安装与配置环境变量
- Abaqus 6.13安装指南 (64位win7)
- C# WinForm开发系列 - Open-Source Controls
- 黑马程序员 JAVA初级-编程基础2 流程控制语句 函数 数组
- 单链表的创建、排序、逆置等
- PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法
- 3g调试-usbmodeswitch移植
- oracle命令大全
- 关于数组指针的疑问
- hdu2056 计算机几何 细节
- 线程与进程
- UTF8编码-变长编码
- IOS声明属性关键词