#include <iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef struct LNode{
int data;
LNode *next;
}LNode, *LinkList;
//初始化
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
return false;
L->next=NULL;
return true;
}
//判空
bool Empty(LinkList L){
if(L->next==NULL)
return true;
else
return false;
}
//按位插入
bool ListInsert(LinkList &L,int i,int e){
if(i<1)
return false;
int j=0;
LNode *p;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//后插操作
bool InsertNextNode(LNode *p,int e){
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
free(s);
return true;
}
//前插操作
bool InsertPriorNode(LNode *p,int e){
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=p->data;
s->next=p->next;
p->next=s;
p->data=e;
free(s);
}
//按位删除
bool ListDelete(LinkList &L,int i,int &e){
if(i<1)
return false;
int j=0;
LNode *p;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
if(p->next==NULL)
return false;
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
//删除指定节点
bool DeleteNode(LNode *p){
if(p==NULL)
return false;
LNode *q=p->next;
p->data=q->data;
p->next=q->next;
free(q);
return true;
}
//按位查找
LNode *GetElem(LinkList L,int i){
if(i<1)
return NULL;
int j=0;
LNode *p;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
//按值查找
LNode *LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
//求表的长度
int length(LinkList L){
LNode *p=L;
int len=0;
while(p->next!=NULL){
len++;
p=p->next;
}
return len;
}
//尾插操作
LinkList List_TailInsert(LinkList &L){
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *s,*r=L;
scanf("%d",&x);
while(x!=999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
r->next= s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
//头插法
LinkList List_HeadInsert(LinkList &L){
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *s;
cout<<"请输入x:";
scanf("%d",&x);
while(x!=999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next= s;
scanf("%d",&x);
}
return L;
}
void LinkListPrint(LinkList L){
for(LNode* p =L->next;p!=NULL;p=p->next)
cout<<p->data<<" ";
cout<<endl;
}
//P17.2.1删除最小值的元素,并返回。空出的位置由最后一个位置填补
void DeleteMin(LinkList &L,int &e) {
LNode *p,*m;
int x;
p=L;
e=p->next->data;
for(p=L->next;p!=NULL;p=p->next){
if(p->data<=e) {
e=p->data;
m=p;
}
if(p->next->next==NULL) {
x=p->next->data;
m->data=x;
p->next=NULL;
}
}
}
int main(int argc, char** argv) {
LinkList L;
InitList(L);
cout<<"isEmpty:"<<Empty(L)<<endl;
List_HeadInsert(L);
cout<<"isEmpty:"<<Empty(L)<<endl;
cout<<" 输出 x:";
LinkListPrint(L);
int e;
DeleteMin(L,e);
cout<<"输出e:"<<e<<endl;
cout<<" 输出 x:";
LinkListPrint(L);
return 0;
}
线性表——单链表
最新推荐文章于 2024-10-12 20:00:42 发布
该博客详细介绍了使用C++编程实现链表的各种操作,包括初始化、判断空链表、按位插入、后插、前插、按位删除、删除指定节点、按位查找、按值查找、求链表长度、尾插、头插以及打印链表内容。主要通过结构体定义节点并进行动态内存分配。在主函数中展示了部分操作的示例应用。
摘要由CSDN通过智能技术生成