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

数据结构复习——————单链表的各种操作(带头节点的初始化方法)

程序员文章站 2022-06-04 09:12:58
...

代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
typedef struct LNode{
	int data;
	struct LNode *next; 
}LNode,*LinkList;
//头插法建立单链表
LinkList List_HeadInsert(LinkList &L){
	//每次均在头节点之后插入元素 
    L=(LNode*)malloc(sizeof(LNode));
	L->next=NULL;
	LNode* s;
    int x;
    scanf("%d",&x);
	while(x!=9999){
        s=(LNode*)malloc(sizeof(LNode));
		s->data=x;
		s->next=L->next;
		L->next=s;
		scanf("%d",&x);
	}
	return L;	
} 
//尾插法建立单链表
LinkList List_TailInsert(LinkList &L){
	//从表头到表尾正向建立单链表,每次均在表尾插入元素
//	LNode* L;
    L=(LNode*)malloc(sizeof(LNode));
    LNode* s;	
    LNode* r;
	s=L;
	int x;
	scanf("%d",&x);
	while(x!=9999){
//		s=(LNode*)malloc(sizeof(LNode));
		r=(LNode*)malloc(sizeof(LNode));
		r->data=x;
		s->next=r;
		s=r;
		scanf("%d",&x);
	}
	r->next=NULL;
	return L;
} 
//按序号查找节点值
LNode *GetElem(LinkList L,int i){
   	 LNode* s;
   	 s=(LNode*)malloc(sizeof(LNode));
   	 s=L->next;
   	 if(i<1)   return NULL;
   	 if(i==0)   return L; 
   	 int j=0;
   	 while(s&&j<i-1){
   	 	s=s->next;
   	 	j++;
		}
   return s;
} 
//按值查找
void LocateElem(LinkList L,int e){
  LNode* s;
//  s=(LNode*)malloc(sizeof(LNode));
  s=L->next;
  int i=1;
  while(s&&s->data!=e){
  	s=s->next;
  	i++;
  }
  if(s)
  printf("该节点在链表的第%d个位置\n",i); 
  else
  printf("该节点不存在!\n");
} 
//插入节点操作
void InsertLNode(LinkList &L,int e,int i){
  LNode* s;
//  s=(LNode*)malloc(sizeof(LNode));
  LNode* r;
  r=(LNode*)malloc(sizeof(LNode));
  s=L->next;
  int j=1;
  while(s&&j<i-1){
    s=s->next;
    j++;
  }
  r->data=e;
  r->next=s->next;
  s->next=r;
} 
//输出表
int PrintList(LinkList L){
     LNode* s;
//	 s=(LNode*)malloc(sizeof(LNode));
     s=L->next;
	 while(s){
	 	printf("%d->",s->data);
	 	s=s->next;
	 } 
	 printf("NULL\n");
} 
int main(){
   LinkList L;
//   List_HeadInsert(L);
   List_TailInsert(L);
   printf("该链表的数据情况如下:\n");
   PrintList(L); 
   printf("找到第一个结点的数据为%d",GetElem(L,1)->data);
   printf("插入一个结点在第三个结点后面,其值为1 \n");
   InsertLNode(L,1,4);
   printf("插入后的链表的数据的情况为:\n");
   PrintList(L);
   printf("按值查找值为5的结点 \n");
   LocateElem(L,5);
    
} 

头插法插入结点的实现各种链表的操作的效果图:
数据结构复习——————单链表的各种操作(带头节点的初始化方法)尾插法实现单链表的各种操作:
数据结构复习——————单链表的各种操作(带头节点的初始化方法)

相关标签: 数据结构复习