链表
来源:互联网 发布:js作用域和this关键字 编辑:程序博客网 时间:2024/06/03 18:31
#include <stdlib.h>
#include <string>
#include "oj.h"
/******************************************************************************/
#define ARRAY_LENGTH 1000
S16 gNodeNum = 0;
Node *gstrList = NULL;
S8 aData[ARRAY_LENGTH];
S8 aResult[ARRAY_LENGTH];
/*****************************************************************************
函 数 名 : U32 DataRead(Node* pList,char *aData)
功能描述 : 完成从字符数组aData[]中读取所有数据并保存在链表中的功能
输入参数 :
输出参数 :
函数返回 : 读取数据成功返回PROC_OK,失败返回ERROR
修改日期 : 2010-08-11
修改人员 : 考生
修改内容 : 创建
*****************************************************************************/
U32 DataRead(Node* pList,char *aData)
{
S16 i = 0;
Node* pNodeTmp = pList;
/*入参检查*/
if ((NULL == pList)||(NULL == aData))
{
return (U32)ERROR;
}
if (0 == aData[0])
{
return (U32)ERROR;
}
/*创建初始化链表*/
for (i=0; i<ARRAY_LENGTH; i++)
{
/* 将从字符数组aData[]中获取的所有数据保存在链表中 */
pNodeTmp->Data = aData[i];
if (0 == aData[i+1])
{
pNodeTmp->next = NULL;
break; /*查询到字符结束*/
}
/*申请下个节点的存储空间*/
pNodeTmp->next = (Node*)malloc(sizeof(Node));
if (NULL == pNodeTmp->next)
{
return (U32)ERROR;
}
/*指向下一个节点*/
pNodeTmp = pNodeTmp->next;
}
/*获取链表节点数*/
gNodeNum = i + 1;
return (U32)PROC_OK;
}
/*****************************************************************************
函 数 名 : U32 DataSort(Node* pList)
功能描述 : 根据题目提供的规则完成对字符串数据进行排序处理,
并将处理后的结果重新保存在原字符串链表中
数据处理规则:从字符串中间一分为二,左边按照ASCII码值升序排列,
右边按照降序排列,如果是奇数,中间的字符位置保持不动即不参与排序
输入参数 : pList 存放待处理数据的链表
输出参数 :
函数返回 : 数据处理成功返回PROC_OK,失败返回ERROR
修改日期 : 2010-08-11
修改人员 : 考生
修改内容 : 创建
*****************************************************************************/
U32 DataSort(Node* pList)
{
U8 Temp = 0;
S16 i = 0;
S16 j = 0;
S16 LoopNum = 0;
Node* pNodeTmp = pList;
Node* pNodeNext = NULL;
/*入参检查*/
if (NULL == pList)
{
return (U32)ERROR;
}
/*根据规则进行数据的排序处理*/
/*将处理后的数据保存在原链表中*/
/*左侧升序排列,冒泡法*/
LoopNum = gNodeNum/2;
if (LoopNum < 2)
{
return (U32)PROC_OK;
}
for (i=0; i<LoopNum-1; i++)
{
pNodeNext = pNodeTmp->next;
for (j=0; j<LoopNum-i-1; j++)
{
if (pNodeTmp->Data > pNodeNext->Data)
{
Temp = pNodeTmp->Data;
pNodeTmp->Data = pNodeNext->Data;
pNodeNext->Data = Temp;
}
pNodeNext = pNodeNext->next;
}
pNodeTmp = pNodeTmp->next;
}
pNodeTmp = pNodeTmp->next;
/*区分奇偶数*/
if (0 != gNodeNum%2)
{
pNodeTmp = pNodeTmp->next;
}
/*右侧降序排列,冒泡法*/
for (i=0; i<LoopNum-1; i++)
{
pNodeNext = pNodeTmp->next;
for (j=0; j<LoopNum-i-1; j++)
{
if (pNodeTmp->Data < pNodeNext->Data)
{
Temp = pNodeTmp->Data;
pNodeTmp->Data = pNodeNext->Data;
pNodeNext->Data = Temp;
}
pNodeNext = pNodeNext->next;
}
pNodeTmp = pNodeTmp->next;
}
return (U32)PROC_OK;
}
/*****************************************************************************
函 数 名 : U32 DataSave(Node* pList,char *aResult)
功能描述 : 完成最终结果输出到字符数组aResult[]中
输入参数 :
输出参数 :
函数返回 : 读取数据成功返回PROC_OK,失败返回ERROR
修改日期 : 2010-08-11
修改人员 : 考生
修改内容 : 创建
*****************************************************************************/
U32 DataSave(Node* pList,char *aResult)
{
S16 i = 0;
Node* pNodeTmp = NULL;
Node* pNodeNext = NULL;
/*入参检查*/
if ((NULL == pList)||(NULL == aResult))
{
return (U32)ERROR;
}
/*将最终结果用字符类型保存数组aResult[]中*/
pNodeTmp = pList;
for (i=0; i<gNodeNum; i++)
{
aResult[i] = pNodeTmp->Data;
pNodeTmp = pNodeTmp->next;
}
/* 字符结束 */
aResult[gNodeNum] = 0;
/* 删除链表 */
pNodeNext = pList->next;
pList->next = NULL;
pList->Data = 0;
while (NULL != pNodeNext)
{
pNodeTmp = pNodeNext->next;
pNodeNext->next = NULL;
pNodeNext->Data = 0;
free(pNodeNext);
pNodeNext = pNodeTmp;
}
return (U32)PROC_OK;
}
#include <stdlib.h>
#include <string>
#include "oj.h"
/******************************************************************************
******************************************************************************/
#define ARRAY_LENGTH 1000
Node *gstrList = NULL;
S8 aData[ARRAY_LENGTH];
S8 aResult[ARRAY_LENGTH];
/*****************************************************************************
函 数 名 : U32 DataRead(Node* pList,char *aData)
功能描述 : 完成从字符数组aData[]中读取所有数据并保存在链表中的功能
输入参数 :
输出参数 :
函数返回 : 读取数据成功返回PROC_OK,失败返回ERROR
修改日期 : 2010-08-11
修改人员 : 考生
修改内容 : 创建
*****************************************************************************/
U32 DataRead(Node* pList, char *aData)
{
/*创建初始化链表*/
int length = 1;
int i = 0;
Node* pListTemp = NULL;
pList->next = NULL;
while ((aData[i] != '\0') && (i<ARRAY_LENGTH))
{
length++;
i++;
}
if (length <= 1)
{
return ERROR;
}
pListTemp = pList;
for (i = 0; i <length; i++)
{
pListTemp->next = (Node*)malloc(sizeof(Node));
if (pListTemp->next != NULL)
{
pListTemp->next->Data = '\0';
pListTemp->next->next = NULL;
pListTemp = pListTemp->next;
}
else
{
return ERROR;
}
}
/* 将从字符数组aData[]中获取的所有数据保存在链表中 */
pListTemp = pList;
for (i = 0; i < length; i++)
{
pListTemp->next->Data = aData[i];
pListTemp = pListTemp->next;
}
return PROC_OK;
}
/*****************************************************************************
函 数 名 : U32 DataSort(Node* pList)
功能描述 : 根据题目提供的规则完成对字符串数据进行排序处理,
并将处理后的结果重新保存在原字符串链表中
数据处理规则:从字符串中间一分为二,左边按照ASCII码值升序排列,
右边按照降序排列,如果是奇数,中间的字符位置保持不动即不参与排序
输入参数 : pList 存放待处理数据的链表
输出参数 :
函数返回 : 数据处理成功返回PROC_OK,失败返回ERROR
修改日期 : 2010-08-11
修改人员 : 考生
修改内容 : 创建
*****************************************************************************/
U32 DataSort(Node* pList)
{
/*根据规则进行数据的排序处理*/
/*将处理后的数据保存在原链表中*/
int length = 0;
int i = 0;
int j = 0;
Node* pListTemp = NULL;
Node* pTemp = NULL;
Node* pTempStart =NULL;
// 计算链表长度
pListTemp = pList;
while (pListTemp->next != NULL)
{
length++;
pListTemp = pListTemp->next;
}
if (0 == length)
{
return ERROR;
}
// 前半部分升序排列
for(i = 0; i < ((length-1)/2-1); i++)
{
pListTemp = pList;
for (j = 0; j < ((length-1)/2-1); j++)
{
if ((pListTemp->next ->Data) > (pListTemp->next ->next->Data))
{
pTemp = pListTemp->next;
pListTemp->next = pTemp->next;
pTemp->next = pListTemp->next->next;
pListTemp->next->next = pTemp;
}
pListTemp = pListTemp->next;
}
}
// 后半部分降序排列
pTempStart = pList;
for (i=0; i < ((length-1)/2 + (length-1)%2); i++)
{
pTempStart = pTempStart->next;
}
for(i = 0; i < ((length-1)/2-1); i++)
{
pListTemp = pTempStart;
for (j = 0; j < ((length-1)/2-1); j++)
{
if ((pListTemp->next ->Data) < (pListTemp->next ->next->Data))
{
pTemp = pListTemp->next;
pListTemp->next = pTemp->next;
pTemp->next = pListTemp->next->next;
pListTemp->next->next = pTemp;
}
pListTemp = pListTemp->next;
}
}
return (U32)PROC_OK;
}
/*****************************************************************************
函 数 名 : U32 DataSave(Node* pList,char *aResult)
功能描述 : 完成最终结果输出到字符数组aResult[]中
输入参数 :
输出参数 :
函数返回 : 读取数据成功返回PROC_OK,失败返回ERROR
修改日期 : 2010-08-11
修改人员 : 考生
修改内容 : 创建
*****************************************************************************/
U32 DataSave(Node* pList,char *aResult)
{
int i = 0;
int length = 0;
Node* pListTemp = NULL;
Node* preNode = NULL;
/*将最终结果用字符类型保存数组aResult[]中*/
pListTemp = pList;
i = 0;
while (pListTemp->next != NULL)
{
aResult[i] = pListTemp->next->Data;
i++;
pListTemp = pListTemp->next;
}
length = i;
if (0 == i)
{
return ERROR;
}
/* 删除链表 */
for (i = 0; i < length; i++)
{
pListTemp = pList;
while (pListTemp->next != NULL)
{
preNode = pListTemp;
pListTemp = pListTemp->next;
}
free(pListTemp);
preNode->next = NULL;
}
return (U32)PROC_OK;
}
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- Java如何每5秒生成一个随机数
- C++学习笔记20140314
- mysql跨库操作速度慢的解决方案
- Ubuntu jsp平台使用JDBC来连接MySQL数据库
- cocos2d-x游戏开发 跑酷(三) 人物跑动
- 链表
- Ubuntu-13.04-X86_64安装GT630驱动
- MySQL: ubuntu10.10 下与 JDBC 操作
- HDU 1327 map
- 黑马程序员---银行业务调度系统
- C++编程 - 真的不要重复造轮子吗
- virtualenv
- bresenham画圆算法
- web.xml配置详解