数据结构之线性表的链式表示和实现
来源:互联网 发布:淘宝上好的澳洲代购 编辑:程序博客网 时间:2024/04/27 14:54
//测试环境:VS2015#include "stdafx.h"#include<stdlib.h>#include<stdio.h>//宏定义#define ERROR 0#define OK 1//定义单链表的存储结构typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;//在带头节点的链表中获取第i个节点值,并用元素e返回int getElem(LinkList L, int i, int &e){ //L是带头节点的单链表的头指针 LinkList p = L->next; int j = 1; while (p&&j < i) { p = p->next;//寻找第i个节点 j++; } if (!p || j > i) { return ERROR; } e = p->data; return OK;}//在带头节点的链表中的第i个节点前插入元素eint listInsert(LinkList &L, int i, int e){ LinkList p = L; int j = 0; while (p&&j < i-1) { p = p->next;//寻找第i-1个节点 j++; } if (!p||j>i-1) { return ERROR; } LinkList s = (LinkList)malloc(sizeof(LNode)); if (!s) { return ERROR; } s->data = e; s->next = p->next; p->next = s; return OK;}//在头节点的单链表L中,删除第i个节点的元素,并用e返回int listDelete(LinkList &L, int i, int &e){ LinkList p = L; int j = 0; while (p->next&&j < i - 1) { p = p->next;//寻找第i-1个节点 j++; } if (!(p->next) || j > i - 1) { return ERROR; } LinkList q = p->next; e = q->data; p->next = q->next; free(q); return OK;}//创建链表int createList(LinkList &L, int n){ //按顺位序输入n个元素的值,建立带头节点的单链表 L = (LinkList)malloc(sizeof(LNode)); L->next = NULL;//建立头节点 LinkList q = L; for (int i = 1; i <= n; i++) { LinkList s = (LinkList)malloc(sizeof(LNode)); if (!s) { return ERROR; } scanf_s("%d", &s->data); q->next = s; s->next = NULL; q = s; //按逆序位输入 //s->next = L->next;//连接第一个节点 //L->next = s; } return OK;}//合并链表int mergerList(LinkList &La, LinkList &Lb, LinkList &Lc){ //已知单链表La,Lb按值非递减排列,合并后得到的单链表Lc也按值非递减排列 LinkList pa = La->next; LinkList pb = Lb->next; LinkList pc = Lc = La; 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(Lb);//释放Lb的头节点 return OK;}//测试int main(){ int e; LinkList list1,list2,list3; //创建链表list1 createList(list1, 7); for (int i = 1; i <= 7; i++) { getElem(list1, i, e); printf("%d ", e); } printf("\n"); //插入节点 listInsert(list1, 8, 100); for (int i = 1; i <= 8; i++) { getElem(list1, i, e); printf("%d ", e); } printf("\n"); listDelete(list1, 1, e); for (int i = 1; i <= 7; i++) { getElem(list1, i, e); printf("%d ", e); } printf("\n"); //创建链表list2 createList(list2, 7); for (int i = 1; i <= 7; i++) { getElem(list2, i, e); printf("%d ", e); } printf("\n"); //合并链表到list3 mergerList(list1, list2, list3); for (int i = 1; i <= 14; i++) { getElem(list3, i,e); printf("%d ", e); } printf("\n"); return 0;}
1 0
- 数据结构之线性表的链式表示和实现
- 数据结构之线性表的链式表示及其实现
- 数据结构—线性表的链式表示和实现
- 线性表的链式表示和实现(数据结构)
- 《数据结构》线性表的链式表示和实现(三)
- 数据结构(2):线性表的链式表示和实现
- 数据结构---线性表的链式表示和实现(一)
- 数据结构---线性表的链式表示和实现(二)
- 《数据结构》进行曲(三)线性表的链式表示和实现之二
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- 线性表的链式表示和实现
- spring之bean的配置细节(二)
- 学习HTTP协议访问数据(Okhttp类实现)
- ACM学习笔记——动态规划
- Go接口 空接口
- Java设计模式--观察者模式
- 数据结构之线性表的链式表示和实现
- Android 流行的网络图片加载库 之 使用 Glide 加载图片 (Google推荐的图片加载库Glide)
- JAVA内存泄漏原因和检测工具
- 理解PHP依赖注入容器(dependency injection container)系列(四) Symfony服务容器:利用Builder创建服务
- Linux的chattr与lsattr命令详解
- 电商项目购物车基本实现
- 多窗口展示页面
- Python Koans(1)-assert
- 验证Java基础是否过关