- 浏览: 514596 次
- 性别:
- 来自: 惠州
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
主类
testlinklist.cpp
#include <stdio.h>
#include "LinkList.h"
#include <pthread.h>
#include <stdlib.h>
#include <sys/time.h>
#include <cstring>
#include <string.h>
#include <unistd.h>
using namespace std;
//delete data before 0x5a 0xa5,返回数据5a a5的首地址
int slipToHeader(unsigned char *data,int dataLength,unsigned char **ptail){
int i;
int noflag = 1;
for(i=0;i<dataLength;i++){
if(data[i]==0x5a){
noflag = 0;
if(dataLength-(i+1)>0){
if(*(data+i+1)==0xa5){
if(i!=0){
int j;
for(j=i;j<dataLength;j++){
data[j-i]=data[j];
}
dataLength=dataLength-i;
*ptail = (*ptail)-i;
}else{
break;
}
}else{
continue;
}
}else{
dataLength = 1;
data[0] = 0x5a;
*ptail = data+1;
}
}
}
if(noflag==1){
*ptail = data;
dataLength = 0;
}
//char *str1 = "Borland International", *str2 = "nation", *ptr;
//ptr = strstr(str1, str2);
//printf("The substring is: %s\n", ptr);
return dataLength;
}
//delete data before 0x5a 0xa5,返回数据5a a5的首地址
int cutHandledData(unsigned char *data,int dataLength,int beCutDataLen,unsigned char **ptail){
int i;
for(i=0;i<dataLength;i++){
data[i]=data[i+beCutDataLen];
}
*ptail = (*ptail)-beCutDataLen;
return dataLength - beCutDataLen;
}
void handleProtocol(unsigned char *protocolData,int len){
//spidev_debug_print_msg((char *)__func__, (unsigned char *)protocolData, len);
switch(protocolData[3]){
case 0x80:
//env->CallVoidMethod(obj, method_reportDeviceStatusDisc, 3);
printf ("handleProtocol get 0x80!\n");
break;
case 0xa2:
printf ("handleProtocol get 0xa2!\n");
break;
case 0x83:
printf ("handleProtocol get 0x83!\n");
break;
case 0x99:
printf ("handleProtocol get 0x99!\n");
break;
}
}
void *insertMcuData(void *arg){
printf ("pthread insertData be start!\n");
unsigned char recv_buf[LEN] ={0x5a,0xa5,0x5,0x80,0x00,0x11,0x0,0x6a,0x5a,0xa5,0x12,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c};
unsigned char recv_buf1[LEN] ={0x5a,0xa5,0x7,0x83,0x00,0x00,0x00,0x11,0x0,0x7d};
unsigned char recv_buf2[LEN] ={0x5a,0xa5,0x6,0x99,0x00,0x11,0x0,0x01,0x8c};
LinkList *tempList = NULL;
tempList = (LinkList *)arg;
//memset(recv_buf, 0x00, sizeof(recv_buf));
//while(1){
printf ("pthread insertData1!\n");
//int realLen = android_spidev_read_data(fd,LEN,0,recv_buf);
int realLen = 29;
if(recv_buf!=NULL&&realLen>0){
//LOGE("pthread insertData data_buf len=%d"+strlen(recv_buf));//strlen 计算字符串的长度,end with '\0'.
//sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小
tempList->EnQueue(recv_buf,realLen);
}
sleep(2);
realLen = 10;
if(recv_buf1!=NULL&&realLen>0){
//LOGE("pthread insertData data_buf len=%d"+strlen(recv_buf));//strlen 计算字符串的长度,end with '\0'.
//sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小
tempList->EnQueue(recv_buf1,realLen);
}
sleep(2);
realLen = 9;
if(recv_buf1!=NULL&&realLen>0){
//LOGE("pthread insertData data_buf len=%d"+strlen(recv_buf));//strlen 计算字符串的长度,end with '\0'.
//sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小
tempList->EnQueue(recv_buf2,realLen);
}
sleep(2);
//system("sleep 1");
//}
return ((void *)0);
}
void *parseMcuProtocol(void *arg){
printf ("pthread parseProtocol be start!\n");
LinkList *tempList = NULL;
tempList = (LinkList *)arg;
if(tempList!=NULL){
unsigned char data[LEN*3];//分配空间
unsigned char tempData[LEN];
int dataLength;
//int a[100];
unsigned char *pa = tempData;
unsigned char *phead=data,*ptail=data;
while(1){
printf ("pthread parseProtocol1!\n");
int tempLength = tempList->DeQueue(&pa);
memcpy(ptail,pa,tempLength);
ptail = ptail+tempLength;
dataLength+=tempLength;
printf("DeQueue ptail tempLength=%d\n",tempLength);
printf("DeQueue ptail dataLength=%d\n",dataLength);
//LOGE("DeQueue ptail point to =0x%x",**ptail);
//for (int i=0; i<dataLength; i++){
// LOGE("DeQueue data before slipToHeader [%d]=0x%x",i,data[i]);
//}
dataLength = slipToHeader(data,dataLength,&ptail);
printf("DeQueue data after slipToHeader dataLength=%d\n",dataLength);
for (int i=0; i<dataLength; i++){
if(i==0)
printf("DeQueue data after slipToHeader \n");
printf("0x%x ",data[i]);
if(i==(dataLength-1))
printf("\n");
}
if(dataLength<4){
//continue;
}else{
//spidev_debug_print_msg((char *)__func__, (unsigned char *)data, dataLength);
int protocolLength = data[2];
int oneProtocolLen = protocolLength+3;
printf("DeQueue data before cutHandledData oneProtocolLen=%d\n",oneProtocolLen);
if(dataLength<oneProtocolLen){
//continue;
}else{
printf("cutHandledData \n");
unsigned char *oneProtocol = new unsigned char[oneProtocolLen];
memset(oneProtocol,0x00,oneProtocolLen);
memcpy(oneProtocol,data,oneProtocolLen);
//when the field copy from data to oneProtocol,then delete field from data
dataLength = cutHandledData(data,dataLength,oneProtocolLen,&ptail);
printf("DeQueue data after cutHandledData dataLength=%d\n",dataLength);
for (int i=0; i<dataLength; i++){
if(i==0)
printf("DeQueue data after cutHandledData \n");
printf("0x%x ",data[i]);
if(i==(dataLength-1))
printf("\n");
}
handleProtocol(oneProtocol,oneProtocolLen);
delete []oneProtocol;
}
}
sleep(2);
}
}
return ((void *)0);
}
int main(void){
pthread_t id1,id2;
void *a1,*a2;
int i,err;
LinkList *dataList = new LinkList;
err=pthread_create(&id1,NULL,insertMcuData,dataList);
if(err!=0){
printf ("Create pthread error1!\n");
//exit (1);
}
err=pthread_create(&id2,NULL,parseMcuProtocol,dataList);
if(err!=0){
printf ("Create pthread error2!\n");
//exit (1);
}
//起第二个线程
//Create monday;
//printf("At the first God made the heaven and the earth.\n");
//char* str = "Naming the light, Day, and the dark, Night, the first day.";
//monday.start(str);
//monday.wait();
pthread_join(id1,NULL);
pthread_join(id2,&a2);
//pthread_exit(NULL);
//unsigned char data[1024]={0x5a,0xa5,0x5,0x80,0x00,0x11,0x0,0x6a,0x5a,0xa5,0x12,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c};
//unsigned char *ptail = data;
//int dataLength = 29;
//dataLength = slipToHeader(data,dataLength,&ptail);
//int i;
//for (i=0; i<dataLength; i++){
// printf("DeQueue data after slipToHeader [%d]=0x%x",i,data[i]);
//}
delete dataList;
return 0;
}
链表实现类
LinkList.cpp
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include "LinkList.h"
#include <cstring>
using namespace std;
LinkList::LinkList()
{
pList = NULL;
front = NULL;
rear = NULL;
listLength = 0;
InitList();
}
LinkList::~LinkList()
{
if (!DestroyList())
{
DestroyList();
}
}
//初始化,分配一个头节点。
bool LinkList::InitList()
{
if (!(pList = new LNode))
{
return false;
}
front = rear = pList;
pList->data = NULL;
pList->dataLength = 0;
pList->next = NULL;
return true;
}
//销毁链表。
bool LinkList::DestroyList()
{
if (!ClearList()) {
return false;
}
delete pList;
pList = front = rear = NULL;
return true;
}
//判断链表是否为空。若为空,返回true,否则返回false。
bool LinkList::IsEmpty() {
if (pList->next == NULL)
{
return true;
}
return false;
}
//返回链表的中当前节点数。
int LinkList::GetLength()
{
return listLength;
}
//将链表清空,释放当前所有节点。
bool LinkList::ClearList()
{
if (pList == NULL)
{
return false;
}
LNode *pTemp = NULL;
while (pList->next != NULL)
{
pTemp = pList->next;
pList->next = pTemp->next;
delete []pTemp->data;
delete pTemp;
if(listLength>0){
listLength--;
}
}
return true;
}
//新增一个节点到对尾,数据设置为data。
bool LinkList::EnQueue(unsigned char data[],int len)
{
LNode *pTemp = NULL;
if(listLength>MAXLENGTH){
return false;
}
pTemp = rear;
LNode *newNode = new LNode;
newNode->data = new unsigned char[len];
newNode->dataLength = len;
for (int i=0; i<len; i++){
newNode->data[i]=data[i];
//printf("EnQueue data [%d]=0x%x",i,data[i]);
if(i==0)
printf("----------LinkList.cpp EnQueue data \n");
printf("0x%x ",data[i]);
if(i==(len-1))
printf("\n");
//LOGE("EnQueue data [%d]=0x%x",i,data[i]);
}
newNode->next = NULL;
pTemp->next = newNode;
rear = newNode;
listLength++;
printf("----------LinkList.cpp EnQueue data pList->next %p \n",pList->next);
return true;
}
//从队头删除节点
int LinkList::DeQueue(unsigned char **data)
{
printf("----------LinkList.cpp DeQueue data pList->next111 %p \n",pList->next);
if(pList->next==NULL)
return 0;
LNode *pTemp = NULL;
pTemp = pList->next;
//*data = pTemp->data;
//LOGE("DeQueue size of tempLength=%d",sizeof(pTemp->data));
printf("---------LinkList.cpp DeQueue dataLength=%d\n",pTemp->dataLength);
memset(*data,0x00,pTemp->dataLength);
memcpy(*data, pTemp->data, pTemp->dataLength);
if(pTemp->next==NULL){
pList->next = NULL;
rear = pList;
}else{
pList->next = pTemp->next;
}
int tempLength = pTemp->dataLength;
for (int i=0; i<tempLength; i++){
if(i==0)
printf("----------LinkList.cpp DeQueue data \n");
printf("0x%x ",*(*data+i));
if(i==(tempLength-1))
printf("\n");
//printf("DeQueue data [%d]=0x%x",i,data[i]);
//LOGE("DeQueue *data [%d]=0x%x",i,*(*data+i));
}
//data = pTemp->data;
delete []pTemp->data;
delete pTemp;
printf("----------LinkList.cpp DeQueue data pList->next222 %p \n",pList->next);
listLength--;
return tempLength;
}
链表头文件类
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
const int LEN=512;
const int MAXLENGTH = 20;
typedef struct LNode
{
unsigned char* data;
int dataLength;
struct LNode *next;
} LNode, *pLinkList;
typedef struct{
pLinkList front;
pLinkList rear;
}LinkQueue;
class LinkList
{
private:
pLinkList pList;
pLinkList front;
pLinkList rear;
int listLength;
public:
LinkList();
~LinkList();
bool InitList();
bool DestroyList();
bool ClearList();
bool IsEmpty();
int GetLength();
bool EnQueue(unsigned char data[],int len);
int DeQueue(unsigned char **data);
};
#endif // LINKLIST_H_INCLUDED
ubuntu下编译
编译
g++ -g LinkList.cpp testlinklist.cpp -o testlinklist -lpthread
./testlinklist
testlinklist.cpp
#include <stdio.h>
#include "LinkList.h"
#include <pthread.h>
#include <stdlib.h>
#include <sys/time.h>
#include <cstring>
#include <string.h>
#include <unistd.h>
using namespace std;
//delete data before 0x5a 0xa5,返回数据5a a5的首地址
int slipToHeader(unsigned char *data,int dataLength,unsigned char **ptail){
int i;
int noflag = 1;
for(i=0;i<dataLength;i++){
if(data[i]==0x5a){
noflag = 0;
if(dataLength-(i+1)>0){
if(*(data+i+1)==0xa5){
if(i!=0){
int j;
for(j=i;j<dataLength;j++){
data[j-i]=data[j];
}
dataLength=dataLength-i;
*ptail = (*ptail)-i;
}else{
break;
}
}else{
continue;
}
}else{
dataLength = 1;
data[0] = 0x5a;
*ptail = data+1;
}
}
}
if(noflag==1){
*ptail = data;
dataLength = 0;
}
//char *str1 = "Borland International", *str2 = "nation", *ptr;
//ptr = strstr(str1, str2);
//printf("The substring is: %s\n", ptr);
return dataLength;
}
//delete data before 0x5a 0xa5,返回数据5a a5的首地址
int cutHandledData(unsigned char *data,int dataLength,int beCutDataLen,unsigned char **ptail){
int i;
for(i=0;i<dataLength;i++){
data[i]=data[i+beCutDataLen];
}
*ptail = (*ptail)-beCutDataLen;
return dataLength - beCutDataLen;
}
void handleProtocol(unsigned char *protocolData,int len){
//spidev_debug_print_msg((char *)__func__, (unsigned char *)protocolData, len);
switch(protocolData[3]){
case 0x80:
//env->CallVoidMethod(obj, method_reportDeviceStatusDisc, 3);
printf ("handleProtocol get 0x80!\n");
break;
case 0xa2:
printf ("handleProtocol get 0xa2!\n");
break;
case 0x83:
printf ("handleProtocol get 0x83!\n");
break;
case 0x99:
printf ("handleProtocol get 0x99!\n");
break;
}
}
void *insertMcuData(void *arg){
printf ("pthread insertData be start!\n");
unsigned char recv_buf[LEN] ={0x5a,0xa5,0x5,0x80,0x00,0x11,0x0,0x6a,0x5a,0xa5,0x12,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c};
unsigned char recv_buf1[LEN] ={0x5a,0xa5,0x7,0x83,0x00,0x00,0x00,0x11,0x0,0x7d};
unsigned char recv_buf2[LEN] ={0x5a,0xa5,0x6,0x99,0x00,0x11,0x0,0x01,0x8c};
LinkList *tempList = NULL;
tempList = (LinkList *)arg;
//memset(recv_buf, 0x00, sizeof(recv_buf));
//while(1){
printf ("pthread insertData1!\n");
//int realLen = android_spidev_read_data(fd,LEN,0,recv_buf);
int realLen = 29;
if(recv_buf!=NULL&&realLen>0){
//LOGE("pthread insertData data_buf len=%d"+strlen(recv_buf));//strlen 计算字符串的长度,end with '\0'.
//sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小
tempList->EnQueue(recv_buf,realLen);
}
sleep(2);
realLen = 10;
if(recv_buf1!=NULL&&realLen>0){
//LOGE("pthread insertData data_buf len=%d"+strlen(recv_buf));//strlen 计算字符串的长度,end with '\0'.
//sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小
tempList->EnQueue(recv_buf1,realLen);
}
sleep(2);
realLen = 9;
if(recv_buf1!=NULL&&realLen>0){
//LOGE("pthread insertData data_buf len=%d"+strlen(recv_buf));//strlen 计算字符串的长度,end with '\0'.
//sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小
tempList->EnQueue(recv_buf2,realLen);
}
sleep(2);
//system("sleep 1");
//}
return ((void *)0);
}
void *parseMcuProtocol(void *arg){
printf ("pthread parseProtocol be start!\n");
LinkList *tempList = NULL;
tempList = (LinkList *)arg;
if(tempList!=NULL){
unsigned char data[LEN*3];//分配空间
unsigned char tempData[LEN];
int dataLength;
//int a[100];
unsigned char *pa = tempData;
unsigned char *phead=data,*ptail=data;
while(1){
printf ("pthread parseProtocol1!\n");
int tempLength = tempList->DeQueue(&pa);
memcpy(ptail,pa,tempLength);
ptail = ptail+tempLength;
dataLength+=tempLength;
printf("DeQueue ptail tempLength=%d\n",tempLength);
printf("DeQueue ptail dataLength=%d\n",dataLength);
//LOGE("DeQueue ptail point to =0x%x",**ptail);
//for (int i=0; i<dataLength; i++){
// LOGE("DeQueue data before slipToHeader [%d]=0x%x",i,data[i]);
//}
dataLength = slipToHeader(data,dataLength,&ptail);
printf("DeQueue data after slipToHeader dataLength=%d\n",dataLength);
for (int i=0; i<dataLength; i++){
if(i==0)
printf("DeQueue data after slipToHeader \n");
printf("0x%x ",data[i]);
if(i==(dataLength-1))
printf("\n");
}
if(dataLength<4){
//continue;
}else{
//spidev_debug_print_msg((char *)__func__, (unsigned char *)data, dataLength);
int protocolLength = data[2];
int oneProtocolLen = protocolLength+3;
printf("DeQueue data before cutHandledData oneProtocolLen=%d\n",oneProtocolLen);
if(dataLength<oneProtocolLen){
//continue;
}else{
printf("cutHandledData \n");
unsigned char *oneProtocol = new unsigned char[oneProtocolLen];
memset(oneProtocol,0x00,oneProtocolLen);
memcpy(oneProtocol,data,oneProtocolLen);
//when the field copy from data to oneProtocol,then delete field from data
dataLength = cutHandledData(data,dataLength,oneProtocolLen,&ptail);
printf("DeQueue data after cutHandledData dataLength=%d\n",dataLength);
for (int i=0; i<dataLength; i++){
if(i==0)
printf("DeQueue data after cutHandledData \n");
printf("0x%x ",data[i]);
if(i==(dataLength-1))
printf("\n");
}
handleProtocol(oneProtocol,oneProtocolLen);
delete []oneProtocol;
}
}
sleep(2);
}
}
return ((void *)0);
}
int main(void){
pthread_t id1,id2;
void *a1,*a2;
int i,err;
LinkList *dataList = new LinkList;
err=pthread_create(&id1,NULL,insertMcuData,dataList);
if(err!=0){
printf ("Create pthread error1!\n");
//exit (1);
}
err=pthread_create(&id2,NULL,parseMcuProtocol,dataList);
if(err!=0){
printf ("Create pthread error2!\n");
//exit (1);
}
//起第二个线程
//Create monday;
//printf("At the first God made the heaven and the earth.\n");
//char* str = "Naming the light, Day, and the dark, Night, the first day.";
//monday.start(str);
//monday.wait();
pthread_join(id1,NULL);
pthread_join(id2,&a2);
//pthread_exit(NULL);
//unsigned char data[1024]={0x5a,0xa5,0x5,0x80,0x00,0x11,0x0,0x6a,0x5a,0xa5,0x12,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c};
//unsigned char *ptail = data;
//int dataLength = 29;
//dataLength = slipToHeader(data,dataLength,&ptail);
//int i;
//for (i=0; i<dataLength; i++){
// printf("DeQueue data after slipToHeader [%d]=0x%x",i,data[i]);
//}
delete dataList;
return 0;
}
链表实现类
LinkList.cpp
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include "LinkList.h"
#include <cstring>
using namespace std;
LinkList::LinkList()
{
pList = NULL;
front = NULL;
rear = NULL;
listLength = 0;
InitList();
}
LinkList::~LinkList()
{
if (!DestroyList())
{
DestroyList();
}
}
//初始化,分配一个头节点。
bool LinkList::InitList()
{
if (!(pList = new LNode))
{
return false;
}
front = rear = pList;
pList->data = NULL;
pList->dataLength = 0;
pList->next = NULL;
return true;
}
//销毁链表。
bool LinkList::DestroyList()
{
if (!ClearList()) {
return false;
}
delete pList;
pList = front = rear = NULL;
return true;
}
//判断链表是否为空。若为空,返回true,否则返回false。
bool LinkList::IsEmpty() {
if (pList->next == NULL)
{
return true;
}
return false;
}
//返回链表的中当前节点数。
int LinkList::GetLength()
{
return listLength;
}
//将链表清空,释放当前所有节点。
bool LinkList::ClearList()
{
if (pList == NULL)
{
return false;
}
LNode *pTemp = NULL;
while (pList->next != NULL)
{
pTemp = pList->next;
pList->next = pTemp->next;
delete []pTemp->data;
delete pTemp;
if(listLength>0){
listLength--;
}
}
return true;
}
//新增一个节点到对尾,数据设置为data。
bool LinkList::EnQueue(unsigned char data[],int len)
{
LNode *pTemp = NULL;
if(listLength>MAXLENGTH){
return false;
}
pTemp = rear;
LNode *newNode = new LNode;
newNode->data = new unsigned char[len];
newNode->dataLength = len;
for (int i=0; i<len; i++){
newNode->data[i]=data[i];
//printf("EnQueue data [%d]=0x%x",i,data[i]);
if(i==0)
printf("----------LinkList.cpp EnQueue data \n");
printf("0x%x ",data[i]);
if(i==(len-1))
printf("\n");
//LOGE("EnQueue data [%d]=0x%x",i,data[i]);
}
newNode->next = NULL;
pTemp->next = newNode;
rear = newNode;
listLength++;
printf("----------LinkList.cpp EnQueue data pList->next %p \n",pList->next);
return true;
}
//从队头删除节点
int LinkList::DeQueue(unsigned char **data)
{
printf("----------LinkList.cpp DeQueue data pList->next111 %p \n",pList->next);
if(pList->next==NULL)
return 0;
LNode *pTemp = NULL;
pTemp = pList->next;
//*data = pTemp->data;
//LOGE("DeQueue size of tempLength=%d",sizeof(pTemp->data));
printf("---------LinkList.cpp DeQueue dataLength=%d\n",pTemp->dataLength);
memset(*data,0x00,pTemp->dataLength);
memcpy(*data, pTemp->data, pTemp->dataLength);
if(pTemp->next==NULL){
pList->next = NULL;
rear = pList;
}else{
pList->next = pTemp->next;
}
int tempLength = pTemp->dataLength;
for (int i=0; i<tempLength; i++){
if(i==0)
printf("----------LinkList.cpp DeQueue data \n");
printf("0x%x ",*(*data+i));
if(i==(tempLength-1))
printf("\n");
//printf("DeQueue data [%d]=0x%x",i,data[i]);
//LOGE("DeQueue *data [%d]=0x%x",i,*(*data+i));
}
//data = pTemp->data;
delete []pTemp->data;
delete pTemp;
printf("----------LinkList.cpp DeQueue data pList->next222 %p \n",pList->next);
listLength--;
return tempLength;
}
链表头文件类
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
const int LEN=512;
const int MAXLENGTH = 20;
typedef struct LNode
{
unsigned char* data;
int dataLength;
struct LNode *next;
} LNode, *pLinkList;
typedef struct{
pLinkList front;
pLinkList rear;
}LinkQueue;
class LinkList
{
private:
pLinkList pList;
pLinkList front;
pLinkList rear;
int listLength;
public:
LinkList();
~LinkList();
bool InitList();
bool DestroyList();
bool ClearList();
bool IsEmpty();
int GetLength();
bool EnQueue(unsigned char data[],int len);
int DeQueue(unsigned char **data);
};
#endif // LINKLIST_H_INCLUDED
ubuntu下编译
编译
g++ -g LinkList.cpp testlinklist.cpp -o testlinklist -lpthread
./testlinklist
发表评论
-
Linux内存点滴 用户进程内存空间 stack heap text data
2013-01-19 16:54 2957Linux内存点滴 用户进程内存空间 经常使用top ... -
Java JNI由浅入深(包括:Java和C++互传ArrayList泛型对象参数)
2011-10-28 15:09 4191Java JNI由浅入深(包括:Java和C++互传Array ... -
JNI编程(二) —— 让C++和Java相互调用(1)
2011-10-28 11:55 934自己在外面偷偷的算了下,又有将近两个月没更新过blog了。趁着 ... -
Android jni 常用方法备忘
2011-10-28 10:44 1200Android jni 常用方法备忘 ... -
c 线程同步
2011-10-28 09:23 894#include <pthread.h> #inc ... -
undefined reference to 'pthread_create'问题解决
2011-10-25 10:19 1292undefined reference to 'pthread ... -
strlen与sizeof的区别
2011-10-12 14:20 844strlen与sizeof的区别 最后一个int a[3 ... -
C/C++语言数组作为参数传递
2011-09-28 17:08 1311#include <stdio.h> #inclu ... -
c/c++字符函数操作
2011-09-20 17:01 852// 取得Xml元素的值 // itemName:元 ... -
C++——指针,堆栈,引用,函数
2011-09-16 14:07 1370C++——指针,堆栈,引用,函数 ... -
今天看了两个小时<<21天学通C++>>把C++中的指针、引用、传值问题弄清楚了
2011-09-16 11:13 1071今天看了两个小时 <<21 天学通 C+ ... -
STL中的"集合类"的定义使用
2011-09-16 09:23 1389STL 中的" 集合类" 的定义 ... -
c++链表操作
2011-09-15 19:22 920最后我学习一下如何在已有的链表上插入节点 我们要考虑四 ... -
c++面向对象的编程入门篇--类构造函数与析构函数
2011-09-15 16:14 979请注意,这一节内容是c++的重点,要特别注意! 我们先说一 ... -
C++实例集合类
2011-09-13 11:04 1288// 此程序通过数组来定义集合类,虽不如链表高级, ... -
C++操作符含义
2011-01-20 10:44 2124C++操作符含义 "->"是 ...
相关推荐
在C++编程语言中,可以使用链表来实现这两种数据结构,因为链表提供了灵活的内存管理和高效的操作。 链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表不需要...
本文将深入探讨二叉链表的概念、特点以及如何使用C++编程语言实现其应用。 二叉链表,又称为二叉链式存储结构,是二叉树的一种存储方式。与数组或静态链表不同,二叉链表中的每个节点包含两个指针,分别指向它的左...
在本文中,我们将深入探讨如何使用C++编程语言来实现一个大数计算器,特别是通过动态链表来处理大数的四则运算。动态链表是一种数据结构,它允许我们在运行时根据需要添加或删除节点,这使得它们非常适合处理不确定...
**C++实现的双向循环链表** 在C++编程中,双向循环链表是一种重要的数据结构,它扩展了单向链表的概念,允许在链表的任一方向上进行前向和后向移动。双向循环链表的每个节点包含两个指针,分别指向其前一个节点和后...
在C语言中,通过链表实现对NMEA-0183协议的解析是一种常见且高效的方法,尤其是在处理大量连续到来的数据时。 首先,我们需要理解NMEA-0183协议的基本结构。每个NMEA语句都以"$"开头,以"*"和校验和结尾,中间是...
在C++编程中,链表是一种非常重要的数据结构,它在处理动态数据集合时具有很高的灵活性。本项目涉及的核心知识点是使用C++实现链表,并结合文件操作将数据读入链表,以及从链表中读取数据写入文件。下面我们将详细...
在这个场景中,我们讨论的是如何使用C++通过链表来实现多项式的加、减、乘、除运算。首先,我们需要理解链表的基本概念以及如何将其应用到多项式表示上。 链表不同于数组,它不连续存储元素,而是通过节点之间的...
本教程“C语言链表_Vc_”聚焦于C语言中的链表操作,是C爱好者深入理解数据结构和算法的重要资源。 链表与数组不同,它不连续存储数据,而是通过节点间的指针链接数据。每个节点包含两部分:数据域,用于存储实际的...
本次上机实验主要关注的是链表,一种常用的数据结构,它在C++中有着广泛的应用。链表不同于数组,其元素不是连续存储的,而是通过指针链接起来,这赋予了链表动态调整大小的能力,以及在插入和删除操作上的优势。 ...
这是基本数据结构及其算法的C++实现,涉及单链表、双链表、栈_、二叉树、并查集、哈夫曼树、平衡二叉树_DataStructure
在IT领域,特别是操作系统如Linux的编程中,链表是一种常用的数据结构,它在各种应用场景中发挥着重要作用,比如在本项目"lrc.rar_linux 链表_linux歌词解析_歌词_链表 歌词解析"中,链表被用来解析和显示歌词。...
在Visual C++环境下,我们可以使用C++语言来实现链表。C++提供了类(class)的概念,使得创建和操作链表变得更为直观和高效。下面我们将详细探讨链表的基本操作和如何使用Visual C++来实现它们: 1. **链表节点定义...
在IT领域,数据结构是编程基础中的重要组成部分,而链表、栈和队列是其中最常见也是最重要的三种数据结构。下面将详细讲解这些概念及其在C和C++中的实现。 首先,我们来讨论链表。链表是一种线性数据结构,与数组...
在这个"数据结构C++版的双循环链表"项目中,我们将深入探讨这个主题。 双循环链表与普通单链表的主要区别在于,每个节点不仅包含指向下一个节点的指针,还包含一个指向前一个节点的指针。这种设计使得在链表中的...
数据链表是计算机科学中数据结构的一个重要组成部分,它在编程中扮演着不可或缺的角色。本压缩包中的"数据链表演示程序"是一个基于VC++ 6.0开发的DOS界面应用,旨在帮助用户理解并可视化数据链表的工作原理。通过这...
在这个特定的项目中,开发者使用了C++编程语言,并且选择了链表作为数据结构来存储客户信息。链表的选择允许程序在运行时动态地增加或减少客户数量,而无需预先定义固定的客户数组大小,这体现了链表在处理动态数据...
C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 C++(数据结构):链表 ...
该系统涉及到了数据结构中的链表知识。下面我们将基于这些信息展开详细的解释与知识点的梳理。 ### 一、仓库管理系统的基本概念 仓库管理系统(Warehouse Management System, WMS)是一种专门用于仓库或物流中心进行...
在C++编程中,链表是一种非常重要的数据结构,它不同于数组,不连续存储数据,而是通过节点间的指针链接起来。在这个项目中,我们利用C++的模板类来实现一个通用的链表,允许链表项的数据元素可以是任意类型。这极大...
在给定的编程实现中,"vc程序"可能指的是使用C++编程语言,C++支持面向对象特性,可以通过定义结构体(struct)来表示链表节点,使用指针作为成员变量来实现链表的连接。通过编写相应的函数,如`reverseList`和`...