博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表bate1.0
阅读量:4204 次
发布时间:2019-05-26

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

#include 
#include
#include
#include
#include
#include
using namespace std;typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;} Node, *LinkList;LinkList CreateList(LinkList &h){ LinkList p,q; ElemType x; h = (LinkList)malloc(sizeof(Node)); p = h; while(cin>>x&&x) { q = (LinkList)malloc(sizeof(Node)); q->data = x; p->next = q; p = q; } p->next = NULL; return h;}void Display(LinkList l){ LinkList p ; p = l->next; while(p!=NULL) { cout<
data<<" "; p = p->next; } cout<
next; l->next = NULL; while(p!=NULL) { q = p; p = p->next; q->next = l->next; l->next = q; }}void Del_Ou(LinkList &l){ LinkList p; p = l->next; int i=1; while(p->next!=NULL) { i++; if(i%2) p=p->next; else { LinkList q = p->next; p->next = p->next->next; free(q); } }}void Insert(LinkList &l,ElemType x){ LinkList p,q; p = l->next; while(p->next!=NULL) { if(p->next->data
next; } else { //cout<
<
data = x; q->next = p->next; p->next = q; break; } }}LinkList MergeList(LinkList &h,LinkList &l,LinkList &A){ LinkList p,q,r; p = h->next; q = l->next; A = r = h;//init while(p!=NULL&&q!=NULL) { if(p->data <= q->data) { r->next = p; r = p; p = p->next; } else { r->next = q; r = q; q = q->next; } } r->next = p?p:q; delete l; return A;}void TakeApart(LinkList &h){ LinkList L1,L2; LinkList p; p = h->next; //L1 = h; //L2 = h; L1->next = NULL; L2->next = NULL; while(p!=NULL) { cout<
data; if(p->data%2==1) { L1->data = p->data; L1 = L1->next; } else { L2->data = p->data; L2 = L2->next; } p = p->next; } L1->next = NULL; L2->next = NULL; Display(L1); Display(L2);}void DisCreate(LinkList &A){ //将表A中结点按序号的奇偶性分解到表A或表B中 int i=0; //i记录表A中结点的序号 LinkList B= (LinkList) malloc (sizeof (Node) ); //创建 B 表表头 B->next=NULL; //B 表的初始化 Node *ra = A, *rb=B; //ra和rb将分别指向将创建的A表和B表的尾结点 LinkList p=A->next; //p为链表工作指针,指向待分解的结点 A->next=NULL; //置空新的 A 表 while (p!=NULL) { i++; //序号加 1 if (i%2==0) //处理序号为偶数的链表结点 { rb->next=p; // 若B表尾描入新结点 rb=p; //rb指向新的尾结点 } else //处理原序号为奇数的结点 { ra->next=p; //在A表尾插入新结点 ra=p; } p=p->next; //将p恢复为指向新的待处理结点 } //while 结束 ra->next=NULL; rb->next=NULL; //return B; Display(A); Display(B);}int main(){ // 1 2 3 4 5 6 7 8 9 10 0 LinkList head; CreateList(head);//建立链表 Display(head);//遍历链表 //Reverse(head);//反转链表 //Display(head); //Del_Ou(head);//删除偶数下标元素 //Display(head); //int x; //cin>>x;//要插入的数 //Insert(head,x);//插入元素,并为非递减序列 //Display(head); //建立两个非递减有序单向链表,然后合并成一个非递减链表。 //LinkList list2; //CreateList(list2);//建立链表二 //Display(head); //Display(list2); //LinkList AfterMerge; //Display(MergeList(head,list2,AfterMerge)); //利用算法1建立的链表,实现将其分解成两个链表, //其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 //TakeApart(head); //Display(DisCreate(head)); //Display(head); DisCreate(head); return 0;}

转载地址:http://hpali.baihongyu.com/

你可能感兴趣的文章
常见的排序算法
查看>>
5.PyTorch实现逻辑回归(二分类)
查看>>
6.PyTorch实现逻辑回归(多分类)
查看>>
8.Pytorch实现5层全连接结构的MNIST(手写数字识别)
查看>>
9.PyTorch实现MNIST(手写数字识别)(2卷积1全连接)
查看>>
hdu 3460 Ancient Printer(trie tree)
查看>>
中间数
查看>>
KMP求前缀函数(next数组)
查看>>
KMP
查看>>
poj 3863Business Center
查看>>
Android编译系统简要介绍和学习计划
查看>>
Android编译系统环境初始化过程分析
查看>>
user2eng 笔记
查看>>
DRM in Android
查看>>
ARC MRC 变换
查看>>
Swift cell的自适应高度
查看>>
【linux】.fuse_hiddenXXXX 文件是如何生成的?
查看>>
【LKM】整合多个LKM为1个
查看>>
【Kernel】内核热补丁技术揭秘
查看>>
【Error】/usr/bin/env: ‘python’: No such file or directory
查看>>