LinkList
来源:互联网 发布:淘宝全棉时代有假货吗 编辑:程序博客网 时间:2024/05/01 19:02
// LinkList.cpp : 定义控制台应用程序的入口点。
//
//
#include "stdafx.h"
#include <iostream>
#include <iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct
{
int data;
}ElemType;
typedef struct
{
int data;
}ElemType;
typedef struct LNode
{
ElemType elem;
struct LNode *next;
}LNode,*LinkList;
{
ElemType elem;
struct LNode *next;
}LNode,*LinkList;
Status GetElem_L(LinkList L, int i, ElemType& e);
Status ListInsert_L(LinkList &L, int i, ElemType e);
Status ListDelete_L(LinkList &L, int i, ElemType &e);
void CreateList_L(LinkList &L, int n);
void MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc);
Status ListInsert_L(LinkList &L, int i, ElemType e);
Status ListDelete_L(LinkList &L, int i, ElemType &e);
void CreateList_L(LinkList &L, int n);
void MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc);
void ShowList(LinkList &L);
int main()
{
LinkList testL,La,Lb,Lc;
CreateList_L(testL, 6);
ShowList(testL);
ElemType e1,temp;
e1.data = 11;
ListInsert_L(testL, 3, e1);
ShowList(testL);
ListDelete_L(testL, 4, temp);
ShowList(testL);
printf("\n删除的节点值为%d", temp.data);
GetElem_L(testL, 2, temp);
printf("\n获取节点2处的值%d\n", temp.data);
{
LinkList testL,La,Lb,Lc;
CreateList_L(testL, 6);
ShowList(testL);
ElemType e1,temp;
e1.data = 11;
ListInsert_L(testL, 3, e1);
ShowList(testL);
ListDelete_L(testL, 4, temp);
ShowList(testL);
printf("\n删除的节点值为%d", temp.data);
GetElem_L(testL, 2, temp);
printf("\n获取节点2处的值%d\n", temp.data);
CreateList_L(La, 3);
CreateList_L(Lb, 4);
CreateList_L(Lc, 0);
ShowList(La);
ShowList(Lb);
MergeList_L(La, Lb, Lc);
ShowList(Lc);
CreateList_L(Lb, 4);
CreateList_L(Lc, 0);
ShowList(La);
ShowList(Lb);
MergeList_L(La, Lb, Lc);
ShowList(Lc);
system("pause");
return 0;
}
return 0;
}
Status GetElem_L(LinkList L, int i, ElemType& e)
{
LNode* p = L->next;
int j = 1;
while (p&&j < i)
{
p = p->next;
++j;
}
if (!p || j>i)return ERROR;
e = p->elem;
return OK;
}
{
LNode* p = L->next;
int j = 1;
while (p&&j < i)
{
p = p->next;
++j;
}
if (!p || j>i)return ERROR;
e = p->elem;
return OK;
}
Status ListInsert_L(LinkList &L, int i, ElemType e)
{
LNode * p = L->next;
int j = 1;
while (p&&j < i-1)
{
p = p->next;
++j;
}
if (!p || j>i-1)return ERROR;
LNode* node =(LNode*)malloc(sizeof(LNode));
node->elem = e;
LNode* q = p->next;
p->next = node;
node->next = q;
return OK;
}
{
LNode * p = L->next;
int j = 1;
while (p&&j < i-1)
{
p = p->next;
++j;
}
if (!p || j>i-1)return ERROR;
LNode* node =(LNode*)malloc(sizeof(LNode));
node->elem = e;
LNode* q = p->next;
p->next = node;
node->next = q;
return OK;
}
Status ListDelete_L(LinkList &L, int i, ElemType &e)
{
LNode *p = L->next;
int j = 1;
while (p->next&&j < i - 1)//注意此处为p->next,因为若是p,则出来的p可能为空
{
p = p->next;
++j;
}
if (!p->next || j>i - 1)return ERROR;
LNode*q= p->next;
e = q->elem;
p->next = p->next->next;
free(q);
return OK;
}
{
LNode *p = L->next;
int j = 1;
while (p->next&&j < i - 1)//注意此处为p->next,因为若是p,则出来的p可能为空
{
p = p->next;
++j;
}
if (!p->next || j>i - 1)return ERROR;
LNode*q= p->next;
e = q->elem;
p->next = p->next->next;
free(q);
return OK;
}
void CreateList_L(LinkList &L, int n)
{
printf("输入节点的值");
// L = (LinkList)malloc(n*sizeof(LNode)); 如果像这样创建的话,那就是生成连续存储空间的线性表,应该单独对每一个节点分配内存空间
L = (LinkList)malloc(sizeof(LNode));
L->next = nullptr;//先生成一个表头的单链表
for (int i = n;i > 0;--i)
{
LNode* pnode = (LinkList)malloc(sizeof(LNode));
scanf_s("%d",&pnode->elem.data);
pnode->next = L->next;//插入方式为向表头的后一个插入,不然插在表尾太麻烦
L->next = pnode;
}
}
{
printf("输入节点的值");
// L = (LinkList)malloc(n*sizeof(LNode)); 如果像这样创建的话,那就是生成连续存储空间的线性表,应该单独对每一个节点分配内存空间
L = (LinkList)malloc(sizeof(LNode));
L->next = nullptr;//先生成一个表头的单链表
for (int i = n;i > 0;--i)
{
LNode* pnode = (LinkList)malloc(sizeof(LNode));
scanf_s("%d",&pnode->elem.data);
pnode->next = L->next;//插入方式为向表头的后一个插入,不然插在表尾太麻烦
L->next = pnode;
}
}
void MergeList_L(LinkList &La, LinkList &Lb, LinkList &Lc)
{
LNode* pa = La->next;
while (pa->next)
{
pa = pa->next;
}
pa->next = Lb->next;
Lc->next = La->next;
free(La);
free(Lb);
}
{
LNode* pa = La->next;
while (pa->next)
{
pa = pa->next;
}
pa->next = Lb->next;
Lc->next = La->next;
free(La);
free(Lb);
}
void ShowList(LinkList &L)
{
printf("\n链表为:");
LNode* pNode = L->next;
while (pNode)
{
printf("--%d", pNode->elem.data);
pNode = pNode->next;
}
}
{
printf("\n链表为:");
LNode* pNode = L->next;
while (pNode)
{
printf("--%d", pNode->elem.data);
pNode = pNode->next;
}
}
0 0
- LinkList
- LinkList
- LinkList
- linklist
- Linklist
- LinkList
- LinkList Operation
- linklist Qsort
- GetElem-LinkList
- ListInsert-LinkList
- ListDelete-LinkList
- CreateListTail-LinkList
- CreateListHead-LinkList
- linklist----reverse
- linkList源码
- 手写LinkList
- 链表linklist
- LinkList链表
- Sqlist
- iis配置php环境
- HTTP协议详解(转)
- pat1018:锤子剪刀布
- hrbust 哈理工oj 2188 星际旅行【BFS+传送阵】
- LinkList
- 算法_11:线性优化_2: 整数规划
- 朱老师ARM裸机学习笔记(一):计算机基础知识
- markdown说明书
- UNIX - stat、fstat和lstat函数,获取文件信息结构
- java的运算符,表达式和语句
- jQuery的filter方法和find方法的(个人使用总结)
- Doxygen使用教程(个人总结)
- Merge Two Sorted Lists