C++链表

#include<iostream>//或#include <bits/stdc++.h>

#include<stdio.h>//或#include <bits/stdc++.h>

#include<stdlib.h>//或#include <bits/stdc++.h>

using namespace std;

typedef int DataType;

typedef struct Node

{

DataType data;//数据域(车厢运货的部分)

struct Node *next;//指针域(连接车厢的挂钩)

} ListNode,*LinkList; //ListNode

void InitList(LinkList *head)//初始化链表 (本质是初始化火车头)

{

if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)//如果内存分配失败

exit(-1);//以错误结束程序

(*head)->next = NULL;//链表头(火车头)先为空

}

int ListEmpty(LinkList head)//判断链表是否为空

{

if(head->next==NULL)

return 1;//如果为空返回1,否则返回0

else

return 0;

}

int InsertList(LinkList head,int i,DataType e)//插入

{

ListNode *p,*pre;

int j;

pre = head;

j=0;

while(pre->next!=NULL&&j<i-1)

{

pre=pre->next;

j++;

}

if(j!=i-1)

{

cout<<"插入位置错!"<<endl;

return 0;

}

if((p=(ListNode *)malloc(sizeof(ListNode)))==NULL)

exit(-1);

p->data=e;

p->next=pre->next;

pre->next = p;

return 1;

}

ListNode *Get(LinkList head,int i)//按序号查找,找到链表里的第几个元素

{

ListNode *p;

int j;

if(ListEmpty(head))//要判断待查找的链表不能为空

return NULL;

if(i<1)//要查找的序号不能有误

return NULL;

j = 0;

p = head;

while(p->next!=NULL&&j<i)

{

p=p->next;

j++;

}

if(j==i)

return p;//成功返回指向该节点的指针

else

return NULL;

}

ListNode *LocateElem(LinkList head,DataType e)//按内容查找

{

ListNode *p;

p = head->next;

while(p)

{

if(p->data!=e)

p=p->next;

else

break;

}

return p;

}

int LocatePos(LinkList head,DataType e)//定位

{

ListNode *p;

int i;

if(ListEmpty(head))

return 0;

p=head->next;

i=1;

while(p)

{

if(p->data==e)

return i;

else

{

p=p->next;

i++;

}

}

if(!p)

return 0;

}

int ListLength(LinkList head)//返回链表长度

{

ListNode *p;

int count = 0;

p = head;

while(p->next!=NULL)

{

p=p->next;

count++;

}

return count;

}

int DeleteList(LinkList head,int i,DataType *e)//删除指定位置的函数

{

ListNode *pre,*p;

int j;

pre = head;

j = 0;

while(pre->next!=NULL&&pre->next->next!=NULL&&j<i-1)

{

pre=pre->next;

j++;

}

if(j!=i-1)

{

cout<<"删除位置错误"<<endl;

return 0;

}

p=pre->next;

*e=p->data;

pre->next=p->next;

free(p);

return 1;

}

void DestroyList(LinkList head)//销毁链表

{

ListNode *p,*q;

p = head;

while(p!=NULL)

{

q=p;

p=p->next;

free(q);

}

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值