单链表
本帖最后由 一世轻尘 于 2021-3-30 19:19 编辑#include<iostream>
#include<cstdlib>
#define LEN sizeof(struct linklist)
using namespace std;
typedef int ElemType;
typedef struct linklist{
ElemType data;
struct linklist *next;
}Node,*LinkList;
int length,num,i;
void InitList(LinkList *L);//初始化链表
void DestroyList(LinkList *L);//销毁链表
void ClearList(LinkList *L);//清空链表
void GetElem(LinkList L,int i,ElemType *e);//获取元素
void ListInsert(LinkList *L,int i,ElemType e);//插入元素结点
void ListDelete(LinkList *L,int i,ElemType *e);//删除元素结点
void ShowList(LinkList L);//输出链表
int ListLength(LinkList L);//求表长
void Error(char *s);//报错信息
Node *LocateElem(LinkList L,ElemType e);//定位元素位置
int main()
{
}
//初始化链表
void InitList(LinkList *L)
{
*L=(Node*)malloc(LEN);
(*L)->next=NULL;
}
//销毁链表
void DestroyList(LinkList *L)
{
Node *p;//定义一个结点指针,指向待销毁的结点
while(*L)
{
p=*L;
*L=(*L)->next;
free(p);
}
}
//清空链表
void ClearList(LinkList *L)
{
Node *p=(*L)->next,*q;//从第一个结点开始释放,保留头结点
while(p)
{
q=p;
p=p->next;
free(q);
}
(*L)->next=NULL;
}
//求表长
int ListLength(LinkList L)
{
int length=0;//计数器
Node *p = L;
while(p->next)
{
length++;
p=p->next;
}
return length;
}
//获取元素
void GetElem(LinkList L,int i,ElemType *e)
{
Node *p=L->next;
int j=1;
while(p&&(j<i))
{
p=p->next;
j++;
}
if(!p||(j>i))
Error("Position Error!");
else
*e = p->data;
}
//定位元素位置
Node *LocateElem(LinkList L,ElemType e)
{
Node *p=L->next;//设置指针,初始时指向链表第一个结点
while(p&&(p->data!=e))//顺链向后扫描
p=p->next;
return p;//返回要查找的元素指针
}
//插入元素
void ListInsert(LinkList *L,int i,ElemType e)
{
Node *p = *L;
int j = 0;
while(p && (j < i-1) )
{
p = p->next;
j++;
}//运行完后p指向第i-1个结点
if(!p||(j>i-1))
Error("Position Error!");
else//插入第i个结点
{
Node *s=(Node*)malloc(LEN);
s->data=e;//赋值
s->next=p->next;
p->next=s;
}
}
//删除元素并返回其数据域的值
void ListDelete(LinkList *L,int i,ElemType *e)
{
Node *p = *L,*q;
int j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
j++;
}//运行完后指向第i-1个结点
if(!(p->next)||(j>i-1))
Error("Position Error!");
q=p->next;
*e=q->data;
p->next=q->next;
free(q);
}
//输出链表
void ShowList(LinkList L)
{
Node *p=L->next;
while(p)
{
cout << p->data;
p = p->next;
}
}
//报错信息
void Error(char *s)
{
cout << s << endl;//输出错误信息提示
exit(1);//退出程序
}
页:
[1]