#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);
}
}