commend.h
#include "afx.h"
typedef struct cmddata
{
char cmd[1024];
int uid;
cmddata * next; //指针域
}cmddata;
class commend
{
public:
commend();
~commend();
int pushcmd(CString cmddata , int uid);
CString popcmd(int &uid);
private:
cmddata *head;
};
commend.cpp
#include "commend.h"
#include <cstring>
using namespace std;
#define LEN sizeof(cmddata)
commend::commend()
{
head = (cmddata * )malloc(LEN);
memset(head , 0 , LEN);
head->next=NULL;
}
commend::~commend()
{
cmddata * p = head;
cmddata * p1 = head;
if(head != NULL)
{
do
{
p1 = p;
p = p->next;
free(p1);
}while(p != NULL);
head = NULL;
}
}
int commend::pushcmd(CString newcmd ,int uid)
{
cmddata * p = head;
if(head->next != NULL) //如果是非空表
{
while(p->next != NULL)
{
p=p->next;
}
cmddata * newnode = (cmddata * )malloc(LEN);
//newnode->cmd.Format("%s" , newcmd);
strcpy_s(newnode->cmd , newcmd.GetBuffer(newcmd.GetLength()+1));
newnode->uid = uid;
newnode->next = NULL;
p->next = newnode;
}
else //如果是空表
{
cmddata * newnode = (cmddata * )malloc(LEN);
strcpy_s(newnode->cmd , newcmd.GetBuffer(newcmd.GetLength()+1));
newnode->uid = uid;
newnode->next = NULL;
head->next = newnode;
}
return TRUE;
}
CString commend::popcmd(int & uid)
{
CString tmpcmd;
cmddata * p = head;
cmddata * pfather = head;
if(head->next != NULL) //如果是非空表
{
while(p->next != NULL)
{
pfather = p;
p=p->next;
}
tmpcmd.Format("%s" , p->cmd);
uid = p->uid;
pfather->next=NULL;
free(p);
}
else //如果是空表
{
tmpcmd="";
uid = 0;
}
return tmpcmd;
}