📄 linklist.h
字号:
#include<iostream.h>
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
typedef struct LNode//定义链表结点。
{
char data;
int weight;
struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int *w,char *v,int n)//顺序输入n个元素的值,建立带头节点的单链线性表L。
{
int i;
LinkList p,q,s;
L=(LinkList)malloc(sizeof(LNode));
q=(LinkList)malloc(sizeof(LNode));//生成新接点。
L->next=q;//先建立一个带头节点的单链表。
for(i=0;i<n;++i,w++,v++){
q->data=*v;
q->weight=*w; //输入元素值。
p=(LinkList)malloc(sizeof(LNode));//生成新接点。
s=q;
q->next=p; //初始表尾
q=p;
}
s->next=NULL;
}
Status LinkInsert_L(LinkList &L,int i,ElemType e){
//在带头接点的单链线性表L中第i个位置之前插入元素。
int j;
LinkList p,s;
p=L;j=0;
while(p&&j<i-1) {p=p->next;++j;}//寻找第i-1个结点。
if(!p||j>i-1) return ERROR;//i小于1或者大于表长。
s=(LinkList)malloc(sizeof(LNode));//生成新结点。
s->data=e;s->next=p->next;//插入L中。
p->next=s;
return OK;
}//LinkInsert_L;
Status Condigit(int &b)//判断输入是否为整数,如果是整数用i返回其值。
{
int j;
char g;
do{//判断输入是否为数字。
j=1;
fflush(stdin);
if(isalpha(g=fgetchar())) {//输入错误。
j=0;cout<<"请输入整数"<<endl;}
else b=g-48;//计算所输入的整数。
}while(!j);//输入正确。
return OK;
}
Status ListDisplay_L(LinkList L){//屏幕输入链表。
LinkList p;
int i=1;
p=L;
if(!p->next) cout<<"链表为空!"<<endl;
else{ p=p->next;
while(p->next)//顺序输出数据。
{ cout<<"第"<<i<<"个元素是"<<p->data<<endl;
p=p->next;i++;
}
cout<<"第"<<i<<"个元素是"<<p->data<<endl;
}
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{//在带头结点的单链表L中,删除第i个元素,并由e返回其值。
LinkList p=L,q;
int j=0;
while(p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱。
p=p->next;++j;
}
if(!(p->next)||j>i-1) return ERROR;//删除位置不合理。
q=p->next;p->next=q->next; //删除并释放结点。
e=q->data;free(q);
return OK;
}//ListDelete_L
Status ListEmpty(LinkList L){//判断一个兰表示否为空,若为空返回TRUE,否则返回FALSE。
if(!(L->next)) return TRUE;
else return FALSE;
}
Status ClearList(LinkList &L){//清空链表,保留头结点。
LinkList p=L->next,q;
L->next=NULL;
while(p->next)//从上自下释放结点。
{ q=p->next;
free(p);
p=q;
}
free(p);
return OK;
}
Status DestroyList(LinkList &L){//销毁一个链表L,L不再存在。
if(!L->next) free(L);
else
{ ClearList(L);
free(L);
}
return OK;
}
Status ListLength(LinkList L,int &n){//求链表长,返回元素个数。
LinkList p=L;
int i=0;
while(p->next)
{ p=p->next;
i++;n=i;
cout<<"hahah"<<endl;
}
return OK;
}
Status ListSearch(LinkList L,int i,LinkList &p){
//返回第n个节点的前躯
int j=0;
p=L;
while(p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱。
p=p->next;++j;
}
if(!(p->next)||j>i-1) return ERROR;//位置不合理。
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -