首页 > 代码库 > 关于链表的一些简单操作

关于链表的一些简单操作

终于上黄金了..

然后就是一波2连败...

最近 完全不想做题啊  一做题 就想碎觉啊

郁闷死了

根据书本 写了点关于单向链表的简单操作

可能还存在点小bug---先放它一马吧

以后可能再进行补充关于它的操作 毕竟还有好多

先慢慢找回敲键盘打代码的感觉

  1 /*  2     线性表之单向链表的一些常见操作  3 */  4 #include <iostream>  5 using namespace std;  6   7 typedef int ElemType;  8 typedef struct LNode  9 { 10     ElemType data; 11     struct LNode* next; 12 }LinkList; 13  14 /* 15 建立单向链表----尾插法 16 */ 17 void CreateLinkList( LinkList* &head , ElemType* arr , int n ) 18 { 19     cout<<"建立链表:"<<endl; 20     LinkList* temp , *rend; 21     head = new LinkList; 22     rend = head; 23     for( int i = 0 ; i<n ; i++ ) 24     { 25         temp = new LinkList; 26         temp->data =http://www.mamicode.com/ arr[i]; 27         rend->next = temp; 28         rend = temp; 29     } 30     rend->next = NULL; 31 } 32  33 /* 34 建立单向链表-头插法 这里我不使用它 个人更倾向于尾插法 35 void CreateLinkList( LinkList* &head , ElemType* arr , int n ) 36 { 37     LinkList* temp; 38     head = new LinkList; 39     head->next = NULL; 40     for( int i = 0 ; i<n ; i++ ) 41     { 42         temp = new LinkList; 43         temp->data = http://www.mamicode.com/arr[i];> 44         temp->next = head->next; 45         head->next = temp; 46     } 47 } 48 */ 49  50 /* 51 输出单向链表 52 */ 53 void printList(LinkList* head) 54 { 55     LinkList* p = head->next; 56     cout<<"输出链表:"<<endl; 57     while( p!=NULL ) 58     { 59         cout<<p->data<<endl; 60         p = p->next; 61     } 62 } 63  64 /* 65 求链表中第x个结点的值 66 */ 67 bool getElemType( LinkList* head , int x , ElemType& value ) 68 { 69     int index = 1; 70     LinkList* p = head->next; 71     if( x<=0 ) 72     { 73         cout<<"fail--error"<<endl; 74         return false; 75     } 76     while( index<x && p!=NULL ) 77     { 78         index++; 79         p = p->next; 80     } 81     if( p==NULL ) 82     { 83         cout<<"damn it.this index is not found"<<endl; 84         return false; 85     } 86     else 87     { 88         cout<<"success-----"<<endl; 89         value = http://www.mamicode.com/p->data; 90     } 91     return true; 92 } 93  94 /* 95 查找特定ElemType的结点标号 96 */ 97 bool getIndex( LinkList* L , ElemType value , int& index ) 98 { 99     int i = 1;100     LinkList* p = L->next;101     while( p!=NULL && p->data!=value )102     {103         p = p->next;104         i++;105     }106     if( p==NULL )107     {108         cout<<"dama it.this value is not found"<<endl;109         return false;110     }111     else112     {113         cout<<"success~~~~~";114         index = i;115     }116     return true;117 }118 119 /*120 插入ElemType的元素到第I个结点的位置121 */122 bool insertElemType( LinkList* &head , int index , ElemType value )123 {124     int i = 1;125     LinkList* p = head;126     LinkList* temp;127     if( index<=0 )128     {129         cout<<"fail--error"<<endl;130         return false;131     }132     while( i<index && p!=NULL )133     {134         i++;135         p = p->next;136     }137     if( p==NULL )138     {139         cout<<"****insert fail****"<<endl;140         return false;141     }142     else143     {144         temp = new LinkList;145         temp->data =http://www.mamicode.com/ value;146         temp->next = p->next;147         p->next = temp;148         cout<<"****insert successfully****"<<endl;149     }150     return true;151 }152 153 /*154 删除第i个结点,并返回该结点的数据信息155 */156 bool deleteNode( LinkList* head , int index , ElemType& value )157 {158     int i = 1;159     LinkList* p = head;160     LinkList* temp;161     if( index<=0 )162     {163         cout<<"---fail error--"<<endl;164         return false;165     }166     while( i<index && p!=NULL )167     {168         i++;169         p = p->next;170     }171     if( p==NULL )172     {173         cout<<"****fail delete***"<<endl;174         return false;175     }176     else177     {178         temp = p->next;179         if( temp==NULL )180         {181             cout<<"****fail delete****"<<endl;182             return false;183         }184         value = http://www.mamicode.com/temp->data;185         p->next = temp->next;186         cout<<"***delete successfully****"<<endl;187         delete temp;188     }189     return true;190 }191 192 /*193 判断链表是否为空表194 */195 bool emptyList( LinkList* head )196 {197     return head->next==NULL;198 }199 200 /*201 求出链表的长度202 */203 int ListLength( LinkList* head )204 {205     int len = 0;206     LinkList* p = head;207     while( p->next!=NULL )208     {209         len++;210         p = p->next;211     }212     return len;213 }214 215 /*216 删除整个链表217 */218 void DestoryList( LinkList* &head )219 {220     LinkList* p = head;221     LinkList* temp = p->next;222     while( temp!=NULL )223     {224         delete p;225         p = temp;226         temp = p->next;227     }228     delete p;229 }230 231 int main()232 {233     int arr[20] = {5,2,0,1,3,1,4};234     LinkList* pList;235     CreateLinkList( pList , arr , 7 );236     printList( pList );237     int value;238     int index;239     if( getElemType( pList , 3 , value ) )240     {241         cout<<"the value is:"<<value<<endl;242     }243     if( getIndex(pList , 1 , index ) )244     {245         cout<<"the index is:"<<index<<endl;246     }247     if( insertElemType( pList , 6 , 11 ) )248     {249         cout<<"成功插入链表元素"<<endl;250         printList( pList );251     }252     253     if( deleteNode( pList , 4 , value ) )254     {255         cout<<"the node deleted ‘ s data is:"<<value<<endl;256         printList( pList );257     }258     if( emptyList( pList ) )259     {260         cout<<"空表"<<endl;261     }262     cout<<"the length is:"<<ListLength(pList)<<endl;263     DestoryList( pList );264     return 0;265 }
View Code

 

today:

  我就希望你可以记住我

  记住我这样活过

  这样在你身边呆过