c++实现单链表

来源:互联网 发布:网络直播服务器 编辑:程序博客网 时间:2024/06/07 19:35
#include <iostream>#include <stdio.h>using namespace std;//#define DataType inttypedef struct node{int data;    struct node *next;}SingleLinkNode,*PointerFirst;//链表结点,链表头指针/*void  CreatList(PointerFirst &head,int a[],int n)//+++++++++++++++++1.头插法建立单链表{PointerFirst s;int i;head=new SingleLinkNode;    head->next=NULL;    for(i=0;i<n;i++)    {   s=new SingleLinkNode;        s->data=a[i];        s->next=head->next;        head->next=s;    }}*/void  CreatList(PointerFirst &head,int a[],int n)//++++++++尾插法,CreatList(链表头指针,数组地址,结点个数){PointerFirst PNew,PEnd;//PEnd末尾指针,PNew新建结点的指针int i;head=new SingleLinkNode;//创建头结点PEnd=head;//PEnd始终指向尾结点,开始时指向头结点for(i=0;i<n;i++){PNew=new SingleLinkNode;//创建新结点PNew->data=a[i];//新建结点被赋值PEnd->next=PNew;//将*PNew插入*PEnd之后PEnd=PNew;}PEnd->next=NULL;//PEnd末尾指针始终指向NULL}void InitalList(PointerFirst &head)//+++++++++++++2.初始化单链表{head=new SingleLinkNode;//创建头结点*headhead->next=NULL;}int GetLength(PointerFirst &head)//++++++++++++++++3.求线性表的长度运算{int i=0;PointerFirst PTemp=head->next;//从第一个结点开始,头结点不算while(PTemp!=NULL){ i++;//结点数量+1PTemp=PTemp->next;//指向下个结点搜索}return i;}SingleLinkNode *GetElement(PointerFirst &head,int i)//+++++++++++++++4.求单链表第i个元素的运算{int j=1;SingleLinkNode *PTemp=head->next;if(i<1||i>GetLength(head)){return NULL;//i参数不正确,返回NULL}while(j<i)//从第一个结点开始找,查找第i个结点{PTemp=PTemp->next;//向下一个结点搜索j++;}return  PTemp;//返回第i个结点的指针}SingleLinkNode *LocateElement(PointerFirst &head,int x)//+++++++++++++5.按值查找{SingleLinkNode *PTemp=head->next;while(PTemp!=head&&PTemp->data!=x)//从第1个结点开始查找data域为x的结点{PTemp=PTemp->next;}return PTemp;//找到后返回该结点的指针,否则返回NULL}int Insert(PointerFirst &head,int i,int x)//++++++++++++++++6.插入结点{int j=1;SingleLinkNode *PTemp=head,*s;s=new SingleLinkNode;//创建一个要插入的结点s->data=x;//对插入结点赋值s->next=NULL;if(i<1||i>GetLength(head)+1)//插入位置检查是否合理{return 0;}while(j<i)//寻找插入位置{PTemp=PTemp->next;j++;}s->next=PTemp->next;//插入结点PTemp->next=s;return 1;//成功返回1}int Delet(PointerFirst &head,int i)//++++++++++++++++++7.删除结点运算{int j=1;PointerFirst PTemp=head,q;if(i<1||i>GetLength(head))//删除位置合理性检查{return 0;}while(j<i)//查找第i-1个结点{PTemp=PTemp->next;j++;}q=PTemp->next;PTemp->next=q->next;//删除结点delete q;//释放结点空间return 1;}void Display(PointerFirst &head)//++++++++++++++++++++8.遍历单链表{PointerFirst PTemp=head->next;while(PTemp){cout<<PTemp->data<<' ';PTemp=PTemp->next;}return ;}int main(){PointerFirst Head;int a[5]={1,2,3,4,5};CreatList(Head,a,5);//CreatList(链表头指针,数组地址,结点个数)Insert(Head,6,6);//Insert(链表头指针,位置,数值);Display(Head);system("pause");return 0;}

在www.cpp.sh的在线编译器的运行结果是



0 0
原创粉丝点击