数据结构线性表之链表
程序员文章站
2022-06-06 11:22:19
...
C++关于链表的操作,包括建立链表(正序和倒序插入)、输出链表内容、插入节点、删除节点、销毁等操作
//单链表基本操作
#include<cstdio>
#include<cstdlib>
#define ElemType int
typedef struct Node{
ElemType data;
struct Node *next;
}LNode,*LinkList;
LinkList link=(LinkList)malloc(sizeof(LNode));
//后插(倒序插入)建立链表
LinkList createLinklist1(LinkList &L){
LNode *s;
int x;
L->next = NULL;
while(scanf("%d",&x),x){
s = (LinkList)malloc(sizeof(LNode));
s->data = x;
s->next = L->next;
L->next = s;
//printf("***\n");
}
return L;
}
//正插
LinkList createLinklist2(LinkList &L){
LNode *s,*p;
s = (LinkList)malloc(sizeof(LNode));
p = (LinkList)malloc(sizeof(LNode));
L->next = s;
int x;
while(scanf("%d",&x),x){
s->data = x;
s->next = NULL;
p->next= s;
p=s;
s = (LinkList)malloc(sizeof(LNode));
printf("--\n");
}
return L;
}
//输出链表
void printLinklist(LinkList &L){
LinkList s = L->next;
if(s==NULL)
return ;
while(s){
printf("%d ",s->data);
s = s->next;
}
printf("\n");
}
//插入一个数到第index位置
int insertLinklist1(LinkList &L,int val,int index){
LNode *s,*p;
s = (LinkList)malloc(sizeof(LNode));
p = (LinkList)malloc(sizeof(LNode));
s=L;
index -=1;
while(index--){
if(!s){
return 0;
}
s=s->next;
}
p->data = val; //核心代码
p->next =s->next;
s->next = p;
/**
*前插后插交换位置
int cnt;
cnt = p->data;
p->data = p->next->data;
p->next->data = cnt;
return 1;
*
*/
}
//按相邻元素值插入
int insertLinklist2(LinkList &L,int val,int inval){
LNode *s,*p;
s = (LinkList)malloc(sizeof(LNode));
p = (LinkList)malloc(sizeof(LNode));
s = L->next;
while(s){
if(s->data == inval){
p->data = val; //核心代码
p->next = s->next;
s->next = p;
//后插到s->data = inval,前插只需把s的值与p的值交换即可
return 1;
}
s = s->next;
}
return 0;
}
//删除第index个节点 ,删除值为val的节点参照 insertLinklist2(..)
int deleteLinklist(LinkList &L,int index){
LNode *s;
s = (LinkList)malloc(sizeof(LNode));
s=L;
index -=1;
while(index--){
if(!s){
return 0;
}
s=s->next;
}
s->next = s->next->next;//核心代码
return 1;
}
//销毁链表
int destroyLinklist(LinkList &L){
LNode *s;
while(L){
s = (LinkList)malloc(sizeof(LNode));
s = L;
L = L->next;
free(s);
}
return 1;
}
int main(){
LinkList linkList = createLinklist2(link);
printLinklist(linkList);
// int flag = insertLinklist2(linkList,3,2);
// printf("%d\n",flag);
// printLinklist(linkList);
int flag = deleteLinklist(linkList,3);
printLinklist(linkList);
flag = destroyLinklist(linkList);
printf("%d\n",flag);
return 0;
}
程序截图:
上一篇: SpringBoot配置文件注入Bean对象使用大全
下一篇: 《数据结构》线性表的静态链表实现