有序链表的合并
2016-03-21 14:00
309 查看
#include<stdio.h> #include<malloc.h> #define ERROR 0 #define OK 1 #define ElemType int typedef int Status; typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; Status ListInsert_L(LinkList &L, int i, ElemType e) { // 算法2.9 // 在带头结点的单链线性表L的第i个元素之前插入元素e LinkList p,s; p = L; int j = 0; while (p && j < i-1) { // 寻找第i-1个结点 p = p->next; ++j; } if (!p || j > i-1) return ERROR; // i小于1或者大于表长 s = (LinkList)malloc(sizeof(LNode)); // 生成新结点 s->data = e; s->next = p->next; // 插入L中 p->next = s; return OK; } // LinstInsert_L Status ListDelete_L(LinkList &L, int i, ElemType &e) { // 算法2.10 // 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 LinkList p,q; p = L; int j = 0; while (p->next && j < i-1) { // 寻找第i个结点,并令p指向其前趋 p = p->next; ++j; } if (!(p->next) || j > i-1) return ERROR; // 删除位置不合理 q = p->next; p->next = q->next; // 删除并释放结点 e = q->data; free(q); return OK; } // ListDelete_L Status CreateLink_L(LinkList &L,int n) { LinkList p,s; int i; ElemType e; p=L=(LinkList)malloc(sizeof(LNode)); p->next=NULL; for (i=0;i<n;i++) { scanf("%d",&e); s=(LinkList)malloc(sizeof(LNode)); s->data=e; p->next=s; p=s; } s->next=NULL; return OK; } Status Load_L(LinkList &L,char c) { LinkList p; p=L; if (!p) return ERROR; printf("List %c:",c); while (p->next!=NULL){ p=p->next; printf("%d ",p->data); } printf("\n"); return OK; } Status mix_L (LinkList &A,LinkList &B,LinkList &C){ LinkList pa,pb,pc; pa=A->next;pb=B->next; C=pc=A; while (pa&&pb){ if (pa->data<=pb->data) { pc->next=pa;pc=pa;pa=pa->next;} else { pc->next=pb;pc=pb;pb=pb->next; } } pc->next=pa?pa:pb; free(B); return OK; } int main(){ LinkList A,B,C; int n; scanf("%d",&n); CreateLink_L(A,n); scanf("%d",&n); CreateLink_L(B,n); Load_L(A,'A'); Load_L(B,'B'); mix_L (A,B,C); Load_L(C,'C'); return OK; }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析
- C语言创建链表错误之通过指针参数申请动态内存实例分析