posts - 17,  comments - 14,  trackbacks - 0
公告
  2009年3月18日

typedef struct LNode
{
 int data;
 struct LNode *next;
}LNode, *pLinkList;

//类的声明

class LinkList
{
 private:
        pLinkList m_pList;
        int m_listLength;
public:
        LinkList();
        ~LinkList();
        bool InitList ();
        bool DestroyList ();
        bool ClearList();
        bool IsEmpty ();
        int GetLength ();
        bool GetNode(int position, LNode** node);
        int LocateElem(int elem);
        bool SetNodeData(int position, int newData);
        bool GetNodeData(int position, int &data);
        bool InsertNode(int beforeWhich, int data);
        bool DeleteNode(int position);
};

//类的实现

 

Stack::Stack():top(NULL)
{
//
}
Stack::Stack(const Stack& a_stack)
{
 if (a_stack.top == NULL)
 {
  top =NULL;
 }
 else
 {
  StackNodePtr temp = a_stack.top;
  StackNodePtr end;
  end= new StackNode;
  end->data = temp->data;
  top =end;
  //第一各节点已经创建,而且填充了数据
  //现在,新的节点要在这个节点之后添加
  temp=temp->link;
  while(temp!=NULL)
  {
   end->link = new StackNode;
   end=end->link;
   end->data =temp->data;
   temp =temp->link;
  }
  end->link =NULL;

 }
}

Stack::~Stack()
{
  char next;
  while (top!=NULL)
    next =pop();
}

BOOL Stack::isempty() const
{
 return (top==NULL);
}

void Stack::push(char the_symbol)
{
 StackNodePtr temNode = new StackNode;
  temNode->data = the_symbol;
  temNode->link = top;
  top= temNode;
}
char Stack::pop()
{

 if (top==NULL)
  return 0;

  char pResult = top->data;
  StackNodePtr temNodePtr = top;
  top=top->link;//top指针向下移动一位
  delete temNodePtr; //释放那个节点的空间
 
}

 

posted @ 2009-03-18 17:24 NANLEE 阅读(287) 评论(0) 编辑

赋值到VC上即可运行调试。

typedef struct LNode

 {
 int data;
 struct LNode *next;
}LNode, *pLinkList;

//类的声明

class LinkList {
private:
 pLinkList m_pList;
 int m_listLength;
public:
 LinkList();
 ~LinkList();
 bool InitList ();
 bool DestroyList ();
 bool ClearList();
 bool IsEmpty ();
 int GetLength ();
 bool GetNode(int position, LNode** node);
 int LocateElem(int elem);
 bool SetNodeData(int position, int newData);
 bool GetNodeData(int position, int &data);
 bool InsertNode(int beforeWhich, int data);
 bool DeleteNode(int position);
};

//类的实现

LinkList::LinkList() {
m_pList = NULL;
m_listLength = 0;

InitList();
}

LinkList::~LinkList() {
if (!DestroyList()) {
  DestroyList();
}
}

//初始化,分配一个头节点。
bool LinkList::InitList() {
if (!(m_pList = new LNode)) {
  return false;
}
m_pList->next = NULL;

return true;
}

//销毁链表。
bool LinkList::DestroyList() {
if (!ClearList()) {
  return false;
}

delete m_pList;

return true;
}

//判断链表是否为空。若为空,返回true,否则返回false。
bool LinkList::IsEmpty() {
if (m_pList->next == NULL) {
  return true;
}
return false;
}

//返回链表的中当前节点数。
int LinkList::GetLength() {
return m_listLength;
}

//将链表清空,释放当前所有节点。
bool LinkList::ClearList() {
if (m_pList == NULL) {
  return false;
}

LNode *pTemp = NULL;
while (m_pList->next != NULL) {
  pTemp = m_pList->next;
  m_pList->next = pTemp->next;
  delete pTemp;
}
m_listLength = 0;

return true;
}

//将position指定的节点内的数据设置为newData。
//第一个有效节点的position为1。
bool LinkList::SetNodeData(int position, int newData) {
LNode *pTemp = NULL;

if (!(GetNode(position, &pTemp))) {
  return false;
}

pTemp->data = newData;

return true;
}

//得到指定位置节点的数据。
//节点索引从1到listLength。
bool LinkList::GetNodeData(int position, int &data) {
LNode *pTemp = NULL;

if (!(GetNode(position, &pTemp))) {
  return false;
}

data = pTemp->data;

return true;
}

//在链表中插入一个节点。
//插入的位置由beforeWhich指定,新节点插入在beforeWhich之前。
//beforeWhich的取值在1到ListLength+1之间。
bool LinkList::InsertNode(int beforeWhich, int data) {
LNode *pTemp = NULL;

if (beforeWhich < 1 || beforeWhich > (m_listLength + 1)) {
  return false;
}

if (!(GetNode(beforeWhich - 1, &pTemp))) {
  return false;
}

LNode *newNode = new LNode;
newNode->data = data;
newNode->next = pTemp->next;
pTemp->next = newNode;

m_listLength++;

return true;
}

//删除一个指定的节点。
//节点位置由position指定。
//positon的值从1到listLength。
//若链表为空或指定的节点不存在则返回false。
bool LinkList::DeleteNode(int position) {
if (position < 1 || position > m_listLength) {
  return false;
}

LNode *pTemp = NULL;
if (!(GetNode(position - 1, &pTemp))) {
  return false;
}

LNode *pDel = NULL;
pDel = pTemp->next;
pTemp->next = pDel->next;
delete pDel;

m_listLength--;

return true;
}

//得到指定位置节点的指针。
bool LinkList::GetNode(int position, LNode **node) {
LNode *pTemp = NULL;
int curPos = -1;

pTemp = m_pList;
while (pTemp != NULL) {
  curPos++;
  if (curPos == position)
   break;
  pTemp = pTemp->next;
}

if (curPos != position) {
  return false;
}

*node = pTemp;

return true;
}

//定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
//节点索引从0开始到listLength。
int LinkList::LocateElem(int elem) {
LNode *pTemp = NULL;
int curIndex = 1;

pTemp = m_pList->next;
while ((pTemp != NULL) && (pTemp->data != elem)) {
  pTemp = pTemp->next;
  curIndex++;
}

if (pTemp == NULL) {
  return 0;
}

return curIndex;
}


/*
int main(){
LinkList l;

l.InsertNode(1, 10);
l.InsertNode(2, 20);
l.InsertNode(3, 30);
l.InsertNode(4, 40);
cout << l.GetLength() << endl;

int dataTemp = 0;
for (int i = 1; i <= l.GetLength(); i++) {
  l.GetNodeData(i, dataTemp);
  cout << dataTemp << endl;
}

if (l.SetNodeData(3, 50)) {
  cout <<"DONE\n";
} else {
  cout << "Failed\n";
}

for (i = 1; i <= l.GetLength(); i++) {
  l.GetNodeData(i, dataTemp);
  cout << dataTemp << endl;
}

if (l.DeleteNode(4)) {
  cout <<"DONE\n";
} else {
  cout << "Failed\n";
}

for (i = 1; i <= l.GetLength(); i++) {
  l.GetNodeData(i, dataTemp);
  cout << dataTemp << endl;
}

cout << l.LocateElem(50) << endl;
return 0;
}
*/

posted @ 2009-03-18 16:57 NANLEE 阅读(963) 评论(0) 编辑