链表

来源:互联网 发布:网络表情包出处 编辑:程序博客网 时间:2024/06/06 10:17

SqList.h(顺序存储线性表)

#pragma once#include "stdafx.h"#include <iostream>using namespace std;/************************************************************************//* 线性表的顺序存储                                                            *//************************************************************************/#define  MAX_LEN 5template<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;}



0 0