链表
2015-06-10 15:01
357 查看
SqList.h(顺序存储线性表)
LinkList.h(链式存储线性表)
main.cpp
#pragma once #include "stdafx.h" #include <iostream> using namespace std; /************************************************************************/ /* 线性表的顺序存储 */ /************************************************************************/ #define MAX_LEN 5 template<typename T> class CSqList { public: CSqList(); ~CSqList(void); public: bool Sq_insert(T data,int index); bool Sq_delete(int index); void Sq_show(); bool Sq_getElement(int index,T& ret); private: int m_length; T m_data[MAX_LEN]; }; template<typename T> CSqList<T>::CSqList():m_length(0) { } template<typename T> CSqList<T>::~CSqList(void) { } template<typename T> bool CSqList<T>::Sq_insert(T data,int index) { if(m_length >= MAX_LEN) { return false; } if(index > m_length) { return false; } for (int i=m_length-1; i > index;i--) { m_data[i+1] = m_data[i]; } m_data[index] = data; m_length++; } template<typename T> bool CSqList<T>::Sq_delete(int index) { if(m_length == 0) { return false; } if((index >= m_length) || (index < 0)) { return false; } for(int i = index+1;i < m_length;i++) { m_data[i-1] = m_data[i]; } m_length--; return true; } template<typename T> void CSqList<T>::Sq_show() { if(m_length == 0) { return; } for(int i=0 ; i < m_length;i++) { cout<<m_data[i]<<" "; } cout<<endl; } template<typename T> bool CSqList<T>::Sq_getElement(int index,T& ret) { if(this->m_length == 0) { return false; } if(index >= this->m_length) { return false; } ret = m_data[index]; return true; }
LinkList.h(链式存储线性表)
#pragma once #include "stdafx.h" #include <iostream> using namespace std; template<typename T> class CLinkList { public: CLinkList(void); ~CLinkList(void); public: bool list_insert(int index,T element); bool list_delete(int index); bool list_getElement(int index,T& element); void list_show(); void list_clear(); private: struct SNode{ T data; struct SNode *next; }; SNode* head; }; template<typename T> CLinkList<T>::CLinkList(void):head(NULL) { head = new SNode(); if(!head) { return; } head->data = 0; head->next = NULL; } template<typename T> CLinkList<T>::~CLinkList(void) { SNode* p =head; while (head) { SNode* q = p; p = p->next; delete q; } } template<typename T> void CLinkList<T>::list_clear() { SNode* p =head; while (p) { SNode* q = p; p = p->next; delete q; } } template<typename T> bool CLinkList<T>::list_insert(int index,T element) { if(!head) { return false; } SNode* p= head; int j=1; while(p && j < index) { p = p->next; j++; } if(!p && j > index) { return false; } SNode* s = new SNode(); s->data = element; s->next = p->next; p->next = s; return true; } template<typename T> bool CLinkList<T>::list_delete(int index) { SNode* p = head; int j = 1; while(p && j < index) { p = p->next; j++; } if(!p || j < index) { return false; } SNode* q = p->next; p->next = q->next; delete q; return true; } template<typename T> bool CLinkList<T>::list_getElement(int index,T& element) { SNode* p = head; int j = 0; while(p && j < index) { p = p->next; j++; } if(!p || j > index) { return false; } element = p->data; return true; } template<typename T> void CLinkList<T>::list_show() { SNode* p = head->next; cout<<"|********************start***************************|"<<endl; while(p) { cout<<p->data<<" "; p = p->next; } cout<<endl<<"|********************end***************************|"<<endl; }调用:
main.cpp
// dataStruct_Test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "SqList.h" #include "LinkList.h" int _tmain(int argc, _TCHAR* argv[]) { CSqList<int> myList; myList.Sq_insert(1,0); myList.Sq_insert(2,1); myList.Sq_insert(3,2); myList.Sq_insert(4,3); myList.Sq_insert(10,2); myList.Sq_insert(5,5); int val = 0; myList.Sq_getElement(2,val); cout<<val<<endl; myList.Sq_show(); myList.Sq_delete(2); myList.Sq_show(); //////////////////////////////////////////////////////// CLinkList<int> linklist; linklist.list_insert(1,1); linklist.list_insert(2,2); linklist.list_show(); linklist.list_getElement(1,val); cout<<val<<endl; linklist.list_insert(2,10); linklist.list_show(); linklist.list_delete(2); linklist.list_show(); linklist.list_clear(); system("pause"); return 0; }
相关文章推荐
- windows下cygwin/mingw编译ffmpeg库
- 链表逆序
- bat命令
- java之顺时钟打印矩阵
- 黑马程序员——Java基础---IO流(字节流)
- Oracle 11gR2 使用 R 4000 MAN duplicate from active database 复制数据库
- Oracle查看字符集后修改oracle服务端和客户端字符集的步骤
- QWT编译、配置、使用(Qt Creator)
- the Suppress Reboot Issue
- uClibc和Glibc不同点(转)
- HTTP---关于HTTP协议中的KeepAlive属性
- 巴菲特选股10招
- 学生信息管理系统收宫篇
- 第一波活动:Tiny Framework 2.0“捉虫挑战”激情推出!
- 查看jquery绑定的事件函数
- Shell
- RDP协议详解
- For XML Path
- COMPRESS 函数
- COMPRESS 函数