欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构线性表之链表

程序员文章站 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;
} 

程序截图:

数据结构线性表之链表