您的位置:首页 > 其它

关于链表的一些简单操作

2014-06-27 22:51 441 查看
终于上黄金了..

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

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

郁闷死了

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

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

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

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



/*
线性表之单向链表的一些常见操作
*/
#include <iostream>
using namespace std;

typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LinkList;

/*
建立单向链表----尾插法
*/
void CreateLinkList( LinkList* &head , ElemType* arr , int n )
{
cout<<"建立链表:"<<endl;
LinkList* temp , *rend;
head = new LinkList;
rend = head;
for( int i = 0 ; i<n ; i++ )
{
temp = new LinkList;
temp->data = arr[i];
rend->next = temp;
rend = temp;
}
rend->next = NULL;
}

/*
建立单向链表-头插法 这里我不使用它 个人更倾向于尾插法
void CreateLinkList( LinkList* &head , ElemType* arr , int n )
{
LinkList* temp;
head = new LinkList;
head->next = NULL;
for( int i = 0 ; i<n ; i++ )
{
temp = new LinkList;
temp->data = arr[i];
temp->next = head->next;
head->next = temp;
}
}
*/

/*
输出单向链表
*/
void printList(LinkList* head)
{
LinkList* p = head->next;
cout<<"输出链表:"<<endl;
while( p!=NULL )
{
cout<<p->data<<endl;
p = p->next;
}
}

/*
求链表中第x个结点的值
*/
bool getElemType( LinkList* head , int x , ElemType& value )
{
int index = 1;
LinkList* p = head->next;
if( x<=0 )
{
cout<<"fail--error"<<endl;
return false;
}
while( index<x && p!=NULL )
{
index++;
p = p->next;
}
if( p==NULL )
{
cout<<"damn it.this index is not found"<<endl;
return false;
}
else
{
cout<<"success-----"<<endl;
value = p->data;
}
return true;
}

/*
查找特定ElemType的结点标号
*/
bool getIndex( LinkList* L , ElemType value , int& index )
{
int i = 1;
LinkList* p = L->next;
while( p!=NULL && p->data!=value )
{
p = p->next;
i++;
}
if( p==NULL )
{
cout<<"dama it.this value is not found"<<endl;
return false;
}
else
{
cout<<"success~~~~~";
index = i;
}
return true;
}

/*
插入ElemType的元素到第I个结点的位置
*/
bool insertElemType( LinkList* &head , int index , ElemType value )
{
int i = 1;
LinkList* p = head;
LinkList* temp;
if( index<=0 )
{
cout<<"fail--error"<<endl;
return false;
}
while( i<index && p!=NULL )
{
i++;
p = p->next;
}
if( p==NULL )
{
cout<<"****insert fail****"<<endl;
return false;
}
else
{
temp = new LinkList;
temp->data = value;
temp->next = p->next;
p->next = temp;
cout<<"****insert successfully****"<<endl;
}
return true;
}

/*
删除第i个结点,并返回该结点的数据信息
*/
bool deleteNode( LinkList* head , int index , ElemType& value )
{
int i = 1;
LinkList* p = head;
LinkList* temp;
if( index<=0 )
{
cout<<"---fail error--"<<endl;
return false;
}
while( i<index && p!=NULL )
{
i++;
p = p->next;
}
if( p==NULL )
{
cout<<"****fail delete***"<<endl;
return false;
}
else
{
temp = p->next;
if( temp==NULL )
{
cout<<"****fail delete****"<<endl;
return false;
}
value = temp->data;
p->next = temp->next;
cout<<"***delete successfully****"<<endl;
delete temp;
}
return true;
}

/*
判断链表是否为空表
*/
bool emptyList( LinkList* head )
{
return head->next==NULL;
}

/*
求出链表的长度
*/
int ListLength( LinkList* head )
{
int len = 0;
LinkList* p = head;
while( p->next!=NULL )
{
len++;
p = p->next;
}
return len;
}

/*
删除整个链表
*/
void DestoryList( LinkList* &head )
{
LinkList* p = head;
LinkList* temp = p->next;
while( temp!=NULL )
{
delete p;
p = temp;
temp = p->next;
}
delete p;
}

int main()
{
int arr[20] = {5,2,0,1,3,1,4};
LinkList* pList;
CreateLinkList( pList , arr , 7 );
printList( pList );
int value;
int index;
if( getElemType( pList , 3 , value ) )
{
cout<<"the value is:"<<value<<endl;
}
if( getIndex(pList , 1 , index ) )
{
cout<<"the index is:"<<index<<endl;
}
if( insertElemType( pList , 6 , 11 ) )
{
cout<<"成功插入链表元素"<<endl;
printList( pList );
}

if( deleteNode( pList , 4 , value ) )
{
cout<<"the node deleted ' s data is:"<<value<<endl;
printList( pList );
}
if( emptyList( pList ) )
{
cout<<"空表"<<endl;
}
cout<<"the length is:"<<ListLength(pList)<<endl;
DestoryList( pList );
return 0;
}


View Code

today:

  我就希望你可以记住我

  记住我这样活过

  这样在你身边呆过
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: