首页 > 学院 > 开发设计 > 正文

单链表的合并

2019-11-14 08:54:06
字体:
来源:转载
供稿:网友

代码示例

/* function:单链表的合并 created by : xilong date: 2017.2.5*/#include "iostream"using namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct Node // 定义结构体{ ElemType data; struct Node *next;}Node;typedef struct Node* LinkList;/* 功能:初始化一个空链表*/LinkList LinkList_Init(){ LinkList head; head = (LinkList)malloc(sizeof(LinkList)); // 申请结点 head->next = NULL; // 头结点的next指向NULL return head;}/* 功能:尾插法创建单链表*/void LinkList_CreateFormTail(LinkList *head){ LinkList p, s; p = *head; int flag = 1; double number; while (flag) { cin >> number; if (number != -99999) { s = (LinkList)malloc(sizeof(LinkList)); s->data = number; p->next = s; p = s; } else { flag = 0; p->next = NULL; // 如果到末尾,将末尾结点的next指向NULL } }}/* 功能:计算链表长度*/Status LinkList_Length(LinkList *head){ LinkList p; p = *head; int count = 0; if (p == NULL) { cout << "空链表!" << endl; return ERROR; } while (p != NULL) { count++; p = p->next; } return count-1;}/* 功能:两个链表合并*/LinkList LinkList_merge(LinkList *LA, LinkList *LB){ LinkList p1, p2; p1 = *LA; p2 = *LB; if (p1->next == NULL) // 如果第一个链表为空,就直接返回第二个链表的头结点 { return *LB; } if (p2->next == NULL) // 如果第二个链表为空,返回第一个链表头结点 { return *LA; } while (p1 && p1->next) // 如果第一个链表有元素,将其循环不断指向下一个结点,直到最后一个结点 { p1 = p1->next; } // 将第一个链表的最后一个结点的next连接到第二个链表头结点的next,将两个链表串成一个链表 p1->next = (*LB)->next; free(*LB); return *LA; // 返回第一个链表的头结点}/* 功能:插入*/Status LinkList_Insert(LinkList *head, int i, ElemType e){ LinkList PRe, s; pre = *head; int k = 1; while (pre && k < i) { pre = pre->next; k++; } if (pre == NULL || k > i || i > LinkList_Length(head)) { cout << "插入位置错误!" << endl; return ERROR; } s = (LinkList)malloc(sizeof(LinkList)); s->data = e; s->next = pre->next; pre->next = s; return OK;}/* 功能:打印单链表中所有数据*/Status LinkList_Print(LinkList *head){ LinkList p; p = (*head)->next; if (p == NULL) { printf("linklist is empty.../n"); return ERROR; } while (p != NULL) { printf("%3d", p->data); p = p->next; } printf("/n"); return OK;}void main(){ LinkList LA, LB, LAB; ElemType e; cout << "LA链表的初始化以及创建:(输入-99999结束)" << endl; LA = LinkList_Init(); LinkList_CreateFormTail(&LA); cout << "打印LA链表数据:"; LinkList_Print(&LA); int count = LinkList_Length(&LA); cout << "LA链表的长度为:"; cout << count << endl; cout << "LB链表的初始化以及创建:(输入-99999结束)" << endl; LB = LinkList_Init(); LinkList_CreateFormTail(&LB); cout << "打印LB链表数据:"; LinkList_Print(&LB); LAB = LinkList_merge(&LA, &LB); cout << "打印合并后的链表:"; LinkList_Print(&LAB); cout << "插入数据,输入插入位置:"; int insert; cin >> insert; LinkList_Insert(&LAB, insert, 98); cout << "打印的链表:"; LinkList_Print(&LAB); system("pause");}

程序截图

这里写图片描述

说明

  有关单链表的删除,查找等操作,在前几篇文章都有完整的代码示例和程序截图。   单链表的基本操作:http://blog.csdn.net/xilong_666/article/details/54862457


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表