<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT元素 &#187; 链表</title>
	<atom:link href="http://www.ourys.com/tags/kinked-list/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ourys.com</link>
	<description>Hector的编程笔记夹，如果喜欢，收藏一个</description>
	<lastBuildDate>Wed, 18 Jan 2012 22:07:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>链表的链式表示和实现（C++模板类实现）</title>
		<link>http://www.ourys.com/post/71.html</link>
		<comments>http://www.ourys.com/post/71.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 01:25:58 +0000</pubDate>
		<dc:creator>Hector</dc:creator>
				<category><![CDATA[数据结构]]></category>
		<category><![CDATA[模板类]]></category>
		<category><![CDATA[链式表示]]></category>
		<category><![CDATA[链表]]></category>

		<guid isPermaLink="false">http://www.ourys.com/hector/ourys.com/?p=60</guid>
		<description><![CDATA[[CODE=cplusplus]<br/>// 名    称 (Unit Name)  :    链表List.h 头文件<br/>// 支    持 (Support)    :    http://www.ourys.com           <br/>#ifndef _LIST_H<br/>#define _LIST_H<br/>template <br/>class List;<br/>/*------------  用友元类做节点  ---
]]></description>
			<content:encoded><![CDATA[<p>[CODE=cplusplus]<br/>// 名    称 (Unit Name)  :    <span class='wp_keywordlink_affiliate'><a href="http://www.ourys.com/tags/kinked-list" title="查看 链表 中的全部文章" target="_blank">链表</a></span>List.h 头文件<br/>// 支    持 (Support)    :    http://www.ourys.com           <br/>#ifndef _LIST_H<br/>#define _LIST_H<br/>template <class DataType><br/>class List;<br/>/*&#8212;&#8212;&#8212;&#8212;  用友元类做节点  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>class ListNode{<br/>public:<br/> ListNode():next(NULL){}   //用构造函数初始化指针<br/> friend class List<DataType>;<br/>private:<br/> DataType data;<br/> ListNode* next;<br/>};<br/>/*&#8212;&#8212;&#8212;&#8212;  <span class='wp_keywordlink_affiliate'><a href="http://www.ourys.com/tags/kinked-list" title="查看 链表 中的全部文章" target="_blank">链表</a></span>的定义  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>class List{<br/>public:<br/> List();       //构造带头节点的链表<br/> ~List();      //销毁线性表<br/> void ClearList();    //将表重置为空表<br/> bool ListEmpty();    //若为空表存在返回True<br/> int ListLength();    //返回表中数据元素个数<br/> bool GetElem(int i,DataType &#038;e);//用e返回表中第i个元素的值<br/> bool ListInsert(int i,DataType e);//在第i个元素后插入值e<br/> bool ListDelete(int i,DataType &#038;e);//删除第i个元素的值并返回<br/>private:<br/> ListNode<DataType>* head;    //头节点<br/> int len;      //链表长度<br/>};<br/>/*&#8212;&#8212;&#8212;&#8212;  构造带头节点的链表  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>List<DataType>::List()<br/>{<br/> if(!(head=(ListNode<DataType>*)malloc(sizeof(ListNode<DataType>)))) exit(1);<br/> len=0;<br/>}<br/>/*&#8212;&#8212;&#8212;&#8212;  销毁链表  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>List<DataType>::~List()<br/>{<br/> DataType e;<br/> while(len!=0) ListDelete(1,e);<br/> free(head);<br/> head=NULL;<br/>}<br/>/*&#8212;&#8212;&#8212;&#8212;  销毁链表  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>bool List<DataType>::ListEmpty()<br/>{<br/> return len==0? true:false;<br/>}<br/>/*&#8212;&#8212;&#8212;&#8212;  返回表中数据元素个数  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>int List<DataType>::ListLength()<br/>{<br/> return len;<br/>}<br/>/*&#8212;&#8212;&#8212;&#8212;  用e返回表中第i个元素的值  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>bool List<DataType>::GetElem(int i, DataType &#038;e)<br/>{<br/> if(i<1||i>len||len==0) return false;<br/> else{<br/>  ListNode<DataType>* p=head;<br/>  for(i;i>0;i&#8211;) p=p->next;<br/>  e=p->data;<br/>  return true;<br/> }<br/>}<br/>/*&#8212;&#8212;&#8212;&#8212;  在第i个元素后插入值e  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>bool List<DataType>::ListInsert(int i,DataType e)<br/>{<br/> if(i<0||i>len) return false;<br/> else{<br/>  ListNode<DataType>* p;<br/>  if(!(p=(ListNode<DataType>*)malloc(sizeof(ListNode<DataType>)))) exit(1);<br/>  p->data=e;<br/>  if(i==0) {p->next=head->next;head->next=p;}<br/>  else{<br/>   ListNode<DataType>* temp=head;<br/>   for(i;i>0;i&#8211;) temp=temp->next;<br/>   p->next=temp->next;<br/>   temp->next=p;<br/>  }<br/>  len++;<br/>  return true;<br/> }<br/> <br/>}<br/>/*&#8212;&#8212;&#8212;&#8212;  删除第i个元素的值并返回  &#8212;&#8212;&#8212;&#8212;&#8211;*/<br/>template <class DataType><br/>bool List<DataType>::ListDelete(int i,DataType &#038;e)<br/>{<br/> if(i<0||i>len) return false;<br/> else{<br/>  ListNode<DataType>* p=head;<br/>  ListNode<DataType>* temp;<br/>  for(i;i>1;i&#8211;) p=p->next;<br/>  temp=p->next;<br/>  e=temp->data;<br/>  p->next=p->next->next;<br/>  free(temp);<br/>  temp=NULL;<br/>  len&#8211;;<br/>  return true;<br/> }<br/>}<br/>#endif<br/><br/>/*&#8212;&#8212;&#8212;&#8212;&#8212;-  基本测试文件  http://ourys.com原创，做人要厚道，转帖请标明来处    &#8212;&#8212;- Author:Hector &#8212;&#8212;-*/<br/><br/>#include<iostream><br/>#include “List.h”<br/>using namespace std;<br/>int main()<br/>{<br/> List<int> my;<br/> int i,temp;<br/> for(i=0;i<10;i++) my.ListInsert(0,i);<br/> for(i=0;i<my.ListLength();i++)<br/> {<br/>  my.GetElem(1+i,temp); <br/>  cout<<temp<<endl;<br/> }<br/> for(i=10;i>0;i&#8211;)<br/> {<br/>  my.ListDelete(i,temp);<br/>  cout<<temp<<" "<<my.ListLength()<<endl;<br/> }<br/> return 0;<br/>}<br/>[/CODE]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ourys.com/post/71.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>线性表链式表示（c语言版）</title>
		<link>http://www.ourys.com/post/39.html</link>
		<comments>http://www.ourys.com/post/39.html#comments</comments>
		<pubDate>Fri, 05 Jun 2009 03:55:54 +0000</pubDate>
		<dc:creator>Hector</dc:creator>
				<category><![CDATA[数据结构]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[链表]]></category>

		<guid isPermaLink="false">http://www.ourys.com/hector/ourys.com/?p=31</guid>
		<description><![CDATA[<br/>[CODE=cplusplus]<br/>//vs2005,vc6.0,gcc测试均通过<br/><br/>/*----------    Link.H     ---------------*/<br/>typedef int DataType;   /*定义节点数据类型*/<br/>typedef struct tagLink<br/>{<br/>DataType data;<br/>struct tagLink* next;   //指向该结构体的指针
]]></description>
			<content:encoded><![CDATA[<p>[CODE=cplusplus]<br/>//vs2005,vc6.0,gcc测试均通过<br/><br/>/*&#8212;&#8212;&#8212;-    Link.H     &#8212;&#8212;&#8212;&#8212;&#8212;*/<br/>typedef int DataType;   /*定义节点数据类型*/<br/>typedef struct tagLink<br/>{<br/>DataType data;<br/>struct tagLink* next;   //指向该结构体的指针<br/>}*Link;                 //指向该结构体的指针<br/>typedef struct tagLinkList<br/>{<br/>Link head;<br/>int len;<br/>}*LinkList;<br/>LinkList InitList()                    //构造一个空的线性表<br/>{<br/>LinkList list;<br/>list=(LinkList)malloc(sizeof(struct tagLinkList));<br/>list->head=NULL;<br/>list->len=0;<br/>return list;<br/>}<br/><br/>int ListInsert(LinkList L,int i,DataType e)   //在第I个元素之后插入e，如果是0则插入在首位<br/>{<br/>if(i<0&#038;&#038;i>L->len) return 0;<br/>else<br/>{<br/>Link bx,p;<br/>bx=(Link)malloc(sizeof(struct tagLink));<br/>bx->data=e;<br/>bx->next=NULL;<br/>p=L->head;<br/>if(i==0)<br/>{ <br/>bx->next=p;<br/>L->head=bx;<br/>}<br/>else<br/>{<br/>int j=1;<br/>    for(j;j<i;j++)<br/>{<br/>     p=p->next;<br/>}<br/>    bx->next=p->next;<br/>     p->next=bx;<br/>}<br/>L->len++;<br/>return 1;<br/>}<br/>}<br/><br/><br/>int ListDelete(LinkList L,int i)   //删除第i个元素<br/>{<br/>if(i<1&#038;&#038;i>L->len) <br/>{<br/> printf(“删除出错”);<br/> return 0;<br/>}<br/>else<br/>{<br/> Link p,q;<br/> DataType t;<br/> p=L->head;<br/> if(i==1) <br/> {<br/>  L->head=p->next;<br/>  t=p->data;<br/>  free(p);<br/> }<br/> else<br/> {<br/>  int j=2;<br/>  for(j;j<i;j++)  p=p->next; <br/>     t=p->next->data;<br/>  q=p->next;<br/>  p->next=p->next->next; <br/>  free(q);<br/> } <br/> L->len&#8211;;<br/> return t;<br/>}<br/>}<br/> <br/><br/>/*&#8212;&#8212;&#8212;&#8212;&#8212;-   http://ourys.com原创，做人要厚道，转帖请标明来处    &#8212;&#8212;- Author:Hector &#8212;&#8212;-*/<br/><br/>/*&#8212;&#8212;&#8212;&#8212;&#8212;-   基本测试文件   &#8212;&#8212;-   Author:Hector &#8212;&#8212;-*/<br/>#include <stdio.h><br/>#include <stdlib.h><br/>#include “List.h”<br/>int main() <br/>{ <br/>Link px;<br/>LinkList list=InitList();<br/>int i;<br/>for(i=0;i<10;i++)<br/>{<br/>ListInsert(list,i,(i+1)*(i+1));<br/>}<br/>ListDelete(list,1);<br/>ListDelete(list,4);<br/>px=list->head;<br/> for(i=0;i
<list->len;i++)<br/> {<br/> printf(“%d\n”,px->data);<br/> px=px->next;<br/> }<br/> printf(“%d\n”,list->len);<br/>    return 0; <br/>} <br/>[/CODE]<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ourys.com/post/39.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>链表的顺序表示和实现（C++模板类实现）</title>
		<link>http://www.ourys.com/post/37.html</link>
		<comments>http://www.ourys.com/post/37.html#comments</comments>
		<pubDate>Thu, 28 May 2009 16:29:23 +0000</pubDate>
		<dc:creator>Hector</dc:creator>
				<category><![CDATA[数据结构]]></category>
		<category><![CDATA[模板类]]></category>
		<category><![CDATA[链表]]></category>
		<category><![CDATA[顺序表示]]></category>

		<guid isPermaLink="false">http://www.ourys.com/hector/ourys.com/?p=29</guid>
		<description><![CDATA[<br/>[CODE=cplusplus]<br/>/*List.h*/<br/>#ifndef _LIST_H<br/>#define _LIST_H<br/>#define LIST_INIT_SIZE 100<br/>#define LISTINCREMENT 10<br/>template <br/>class List<br/>{ <br/>public:<br/> List();     //构造函数：构造一个空的线性表<br/> //~List(); //析构函数<br/> void
]]></description>
			<content:encoded><![CDATA[<p>[CODE=cplusplus]<br/>/*List.h*/<br/>#ifndef _LIST_H<br/>#define _LIST_H<br/>#define LIST_INIT_SIZE 100<br/>#define LISTINCREMENT 10<br/>template <class T><br/>class List<br/>{ <br/>public:<br/> List();     //构造函数：构造一个空的线性表<br/> //~List(); //析构函数<br/> void DestroyList();  //销毁线性表<br/> void ClearList();    //将表重置为空表<br/> bool ListEmpty();    //若为空表存在返回True<br/> int ListLength();   //返回表中数据元素个数<br/> T GetElem(int i,T &#038;e);     //用e返回表中第i个元素的值<br/> int LocateElem(T e);  //返回表中第一个e元素的位置<br/>    T PriorElem(T cur_e,T &#038;pre_e);        //返回前驱<br/> T NextElem(T cur_e,T &#038;next_e);        //返回后继<br/> void ListInsert(int i,T e);      //在第i个元素插入值e<br/> T ListDelete(int i,T &#038;e);        //删除第i个元素的值并返回<br/> void ListTraverse(void visit());  //对每个元素进行visit()<br/><br/>private:<br/> T *elem;<br/> int length;<br/> int listsize; <br/>};<br/><br/>//构造一个空的线性表<br/>template <class T><br/>List<T>::List()   <br/>{<br/> elem=(T *)malloc(LIST_INIT_SIZE*sizeof(T));  /*分配空间*/<br/> if(!elem)   <br/>  throw   “Allocation   failed”;<br/> else<br/> {<br/>  length=0;<br/>     listsize=LIST_INIT_SIZE;<br/> }<br/>}<br/>//销毁线性表<br/>template <class T><br/>void List<T>::DestroyList()       <br/>{<br/> free(elem);<br/>}<br/>//将表重置为空表<br/>template <class T><br/>void List<T>::ClearList()        <br/>{<br/> length=0;<br/>}<br/> //若为空表存在返回True<br/>template <class T><br/>bool List<T>::ListEmpty()      <br/>{<br/> return length ? true :false;<br/>}<br/>//返回表中数据元素个数<br/>template <class T><br/>int List<T>::ListLength()        <br/>{<br/> return length;<br/>}<br/>//用e返回表中第i个元素的值<br/>template <class T><br/>T List<T>::GetElem(int i,T &#038;e)          <br/>{<br/> if(i<1||i>length)<br/>  throw “Index out of bounds”;<br/> else<br/>     e=elem[i-1];<br/> return e;<br/>}<br/> //返回表中第一个e元素的位置<br/>template <class T>                         <br/>int List<T>:: LocateElem(T e)<br/>{<br/> for(int i=0;i<length;i++)<br/> {<br/> if(elem[i]==e)<br/>  return i+1;<br/> } <br/> cout<<"表中不存在值为"<<e<<"的元素!"<<endl;<br/> return 0;<br/> <br/> <br/>}<br/>//返回前驱<br/>template <class T><br/>T List<T>::PriorElem(T cur_e,T &#038;pre_e)        <br/>{<br/> int i=LocateElem(cur_e);<br/> if(i>1)<br/> {<br/> pre_e=elem[i-2];<br/> return pre_e;<br/> }<br/> else<br/>  return NULL;<br/>}<br/>//返回后继<br/>template <class T><br/>T List<T>::NextElem(T cur_e,T &#038;next_e)        <br/>{<br/> int i=LocateElem(cur_e);<br/> if(i>0&#038;&#038;i<length)<br/> {<br/> next_e=elem[i]; <br/> return next_e;<br/> }<br/> else<br/>  return NULL;<br/>}<br/>//在第i个元素插入值e<br/>template <class T><br/>void List<T>::ListInsert(int i,T e)<br/>{<br/> if(i<0||i>length+1) cout<<"error!";<br/> else if(i==length)<br/> {<br/>  elem = (T *)realloc(elem,(length+LISTINCREMENT)*sizeof(T));<br/> }<br/> for(int j=length;j>=i;j&#8211;) elem[length]=elem[length-1];<br/> elem[i-1]=e;<br/> length++;<br/>}<br/>//删除第i个元素的值并返回<br/>template <class T><br/>T List<T>::ListDelete(int i,T &#038;e)<br/>{<br/> if(length==0) return NULL;<br/> if(i<0||i>length) return NULL;<br/> e=elem[i-1];<br/> for(int j=i;j<length;j++) elem[j-1]=elem[j];<br/> length&#8211;;<br/> return e;<br/>}<br/>//对每个元素进行visit()<br/>template <class T><br/>void List<T>::ListTraverse(void visit())<br/>{<br/> for(i=0;i<length;i++) visit(elem[i]);<br/>}<br/><br/>#endif<br/><br/> <br/><br/>//程序测试文件，http://blog.ourys.com/原创，做人好厚道，转载请表明出去<br/><br/>#include<iostream><br/>#include “List.h”<br/>using namespace std;<br/>int main()<br/>{<br/><br/> List<int> list;<br/> for(int i=0;i<10;i++) list.ListInsert(i+1,i*(1+i));<br/> int a[10],b[10];<br/> for(int i=0;i
<list.ListLength();i++) cout<<list.GetElem(1+i,a[i])<<endl;<br/><br/> cout<
<list.ListLength()<<endl;<br/> cout<
<list.LocateElem(90)<<endl;<br/> list.NextElem(0,b[0]);<br/> cout<<b[0]<<endl;<br/> cout<
<list.ListDelete(4,b[1])<<endl;<br/> for(int i=0;i
<list.ListLength();i++) cout<<list.GetElem(1+i,a[i])<<endl;<br/><br/> <br/>     return 0;<br/>}<br/>[/CODE]<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ourys.com/post/37.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

