数据结构链表结点交换
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STATUS InsertList_L(PLINKNODE_S pstHeadNode, int nPosition, int nElement)
{
PLINKNODE_S p, s;
int i = 0;
p = pstHeadNode;
while (p && i < nPosition-1)
{ //寻找第nPosition-1个结点
{
scanf("%s", &szCommond);
if (szCommond[0] == 'i')
{
InsElement(pstLinkList);
}
else if (szCommond[0] == 'h')
{
ExcElement(pstLinkList);
}
else if (szCommond[0] == 'e')
{
return ERROR; //交换位置不合理
}
q = p->pNext;
e=p->nElem;
p->nElem=q->nElem;
q->nElem=e; //交换第i个和第i-1个节点的数据
return OK;
}
STATUS DisplayList_L(PLINKNODE_S pstHeadNode)
printf("操作命令: \n");
printf("i -------插入, h -------互换\n");
printf("e -------退出, s -------显示当前线性表\n");
printf("\n");
printf("请先插入,然后互换!\n");
printf("\n");
while (OK)
int nTemp = 0;
int e=0;
p = pstHeadNode;
while (p->pNext && nTemp < nPosition - 1) //寻找第i个节点,并令p指向其前趋节点
{
p = p->pNext;
++nTemp;
}
if (!(p->pNext) || (nTemp > nPosition - 1))
printf("请输入合法INT值: ");
scanf("%d", &nElement);
printf("请输入合法INT值作为元素在顺序表中位置: ");
scanf("%d", &nPosition);
if (InsertList_L(pstSqList, nPosition, nElement))//向链表中插入数据以及指定数据在链表中的位置
{
printf("插入操作成功\n\n");
}
else
{
printf("输入非法INT值,插入操作失败\n\n");
}
return 0;
}
long ExcElement(PLINKNODE_S pstSqList)
{
int nPosition;
int nElement;
printf("请输入合法INT值在顺序表中位置: ");
#include <Windows.h>
#define STATUS int
#define ERROR 0
#define OK1
typedef struct tagLinkNode
{
int nElem;
struct tagLinkNode *pNext;
}LINKNODE_S, *PLINKNODE_S;
s->nElem = nElement;
s->pNext = p->pNext; //插入L中
p->pNext = s;
return OK;
}
STATUS ExchangeList_L(PLINKNODE_S pstHeadNode, int nPosition)
{
PLINKNODE_S p, q;
}
printf("NULL\n");
return OK;
}
STATUS DestoryList_L(PLINKNODE_S pstHeadNode)
{
PLINKNODE_S pScanNode, pTempNode;
pScanNode = pstHeadNode;
if (NULL == pstHeadNode)
{
return ERROR;
}
while (pScanNode->pNext != NULL)
{
pTempNode = pScanNode;
pScanNode = pScanNode->pNext;
free(pTempNode);
}
return OK;
}
#ifdef _cplusplus
}
#endif
}
int main()
{
PLINKNODE_S pstLinkList;
char szCommond[10];
pstLinkList = (PLINKNODE_S)malloc(sizeof(LINKNODE_S));
pstLinkList->nElem = 0; //通常头结点不赋值
pstLinkList->pNext = NULL; //将头结点的后继结点指针指向空
scanf("%d", &nPosition);
if (ExchangeList_L(pstSqList, nPosition))//指定数据在链表中的位置,交换该节点
{
printf("操作成功\n\n");
}
else
{
printf("输入非法INT值,交换操作失败\n\n");
}
return 0;
p = p->pNext;
++i;
}
if (!p || i > nPosition-1)
{
return ERROR; // i小于1或者大于表长
}
s = (PLINKNODE_S)malloc(sizeof(LINKNODE_S)); //生成新结点
s->pNext = NULL; //将结构中指针初始化为空值
题目:有一个有n个结点的单链表,设计一个函数将第i-1个结点与第i个结点互换,但指针不变。
主函数main.cpp
#include <stdio.h>
#include "List_Link.h"
long InsElement(PLINKNODE_S pstSqList)
{
int nElement;
int nPosition;
{
PLINKNODE_S pScanNode;
pScanNode = pstHeadNode;
printf("HEAD -> ");
while (pScanNode->pNext != NULL)
{
pScanNode = pScanNode->pNext;
printf("%d -> ", pScanNode->nElem);
{
break;
}源自文库
else if (szCommond[0] == 's')
{
DisplayList_L(pstLinkList);
}
}
DestoryList_L(pstLinkList);
return 0;
}
头文件head.h
#ifdef _cplusplus
extern "C"{
#endif
#include <stdio.h>
{
PLINKNODE_S p, s;
int i = 0;
p = pstHeadNode;
while (p && i < nPosition-1)
{ //寻找第nPosition-1个结点
{
scanf("%s", &szCommond);
if (szCommond[0] == 'i')
{
InsElement(pstLinkList);
}
else if (szCommond[0] == 'h')
{
ExcElement(pstLinkList);
}
else if (szCommond[0] == 'e')
{
return ERROR; //交换位置不合理
}
q = p->pNext;
e=p->nElem;
p->nElem=q->nElem;
q->nElem=e; //交换第i个和第i-1个节点的数据
return OK;
}
STATUS DisplayList_L(PLINKNODE_S pstHeadNode)
printf("操作命令: \n");
printf("i -------插入, h -------互换\n");
printf("e -------退出, s -------显示当前线性表\n");
printf("\n");
printf("请先插入,然后互换!\n");
printf("\n");
while (OK)
int nTemp = 0;
int e=0;
p = pstHeadNode;
while (p->pNext && nTemp < nPosition - 1) //寻找第i个节点,并令p指向其前趋节点
{
p = p->pNext;
++nTemp;
}
if (!(p->pNext) || (nTemp > nPosition - 1))
printf("请输入合法INT值: ");
scanf("%d", &nElement);
printf("请输入合法INT值作为元素在顺序表中位置: ");
scanf("%d", &nPosition);
if (InsertList_L(pstSqList, nPosition, nElement))//向链表中插入数据以及指定数据在链表中的位置
{
printf("插入操作成功\n\n");
}
else
{
printf("输入非法INT值,插入操作失败\n\n");
}
return 0;
}
long ExcElement(PLINKNODE_S pstSqList)
{
int nPosition;
int nElement;
printf("请输入合法INT值在顺序表中位置: ");
#include <Windows.h>
#define STATUS int
#define ERROR 0
#define OK1
typedef struct tagLinkNode
{
int nElem;
struct tagLinkNode *pNext;
}LINKNODE_S, *PLINKNODE_S;
s->nElem = nElement;
s->pNext = p->pNext; //插入L中
p->pNext = s;
return OK;
}
STATUS ExchangeList_L(PLINKNODE_S pstHeadNode, int nPosition)
{
PLINKNODE_S p, q;
}
printf("NULL\n");
return OK;
}
STATUS DestoryList_L(PLINKNODE_S pstHeadNode)
{
PLINKNODE_S pScanNode, pTempNode;
pScanNode = pstHeadNode;
if (NULL == pstHeadNode)
{
return ERROR;
}
while (pScanNode->pNext != NULL)
{
pTempNode = pScanNode;
pScanNode = pScanNode->pNext;
free(pTempNode);
}
return OK;
}
#ifdef _cplusplus
}
#endif
}
int main()
{
PLINKNODE_S pstLinkList;
char szCommond[10];
pstLinkList = (PLINKNODE_S)malloc(sizeof(LINKNODE_S));
pstLinkList->nElem = 0; //通常头结点不赋值
pstLinkList->pNext = NULL; //将头结点的后继结点指针指向空
scanf("%d", &nPosition);
if (ExchangeList_L(pstSqList, nPosition))//指定数据在链表中的位置,交换该节点
{
printf("操作成功\n\n");
}
else
{
printf("输入非法INT值,交换操作失败\n\n");
}
return 0;
p = p->pNext;
++i;
}
if (!p || i > nPosition-1)
{
return ERROR; // i小于1或者大于表长
}
s = (PLINKNODE_S)malloc(sizeof(LINKNODE_S)); //生成新结点
s->pNext = NULL; //将结构中指针初始化为空值
题目:有一个有n个结点的单链表,设计一个函数将第i-1个结点与第i个结点互换,但指针不变。
主函数main.cpp
#include <stdio.h>
#include "List_Link.h"
long InsElement(PLINKNODE_S pstSqList)
{
int nElement;
int nPosition;
{
PLINKNODE_S pScanNode;
pScanNode = pstHeadNode;
printf("HEAD -> ");
while (pScanNode->pNext != NULL)
{
pScanNode = pScanNode->pNext;
printf("%d -> ", pScanNode->nElem);
{
break;
}源自文库
else if (szCommond[0] == 's')
{
DisplayList_L(pstLinkList);
}
}
DestoryList_L(pstLinkList);
return 0;
}
头文件head.h
#ifdef _cplusplus
extern "C"{
#endif
#include <stdio.h>