0
点赞
收藏
分享

微信扫一扫

王道考研数据结构之链表的增删改查

alanwhy 2022-04-23 阅读 77
数据结构
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
    int data;
    struct LNode *next;
}LNode,*Linklist;
//头插法
Linklist head_InitList(Linklist &L){
	printf("请依次输入你要插入的元素:");
	LNode *s;
	int data;
	L = (LNode*)malloc(sizeof(LNode));
	L->next=NULL;                   
	scanf("%d",&data);
	while(data!=9999){
		s = (LNode*)malloc(sizeof(LNode));
		s->next=L->next;
		s->data=data;
		L->next=s;
		scanf("%d",&data);
	}
	return L; 
}
//尾插法 
Linklist tail_InitList(Linklist &L){
	printf("请依次输入你要插入的元素:");
	int data;
	L = (LNode*)malloc(sizeof(LNode));
	LNode *s,*r=L;
	scanf("%d",&data);
	while(data!=9999){
		s=(LNode*)malloc(sizeof(LNode));
		s->data=data;
		r->next=s;
		r=s;
		scanf("%d",&data);
	}
	r->next=NULL; 
	return L;
}
//求表长 
void Length(Linklist L){
	int a=0;
	LNode *p;
	p=L;
	while(p->next!=NULL) 
	{
		a+=1;
		p=p->next;
	}
	printf("该单链表的表长为:%d\n",a);	 
}
//按值查找操作 
LNode *LocateElem(LNode *L,int e){
/*
	LNode *s;
	s=L;
	while(s){
		if(s->data==e) break;
		else s=s->next;
	}
	return s;
*/
	LNode *p=L->next;
	while(p&&p->data!=e) p=p->next;
	return p;
}
//按位查找操作 
LNode *GetElem(Linklist L,int i){
	LNode *p;
	p=L->next;
	if (i==0) return L;
	if (i<0) return NULL;
	for(int j=1;j<i;j++) p=p->next;
	return p; 
}
//插入操作 
Linklist ListInsert(Linklist &L,int i,int e){
	LNode *p,*s;
	p=GetElem(L,i-1);
	s->next=p->next;
	p->next=s;
	s->data=e;
}
//按位删除操作 
Linklist ListDelete(Linklist &L,int i){
	LNode *p,*s;
	p=GetElem(L,i-1);
	s=p->next;
	p->next=p->next->next; 
	free(s);
	
}
//输出操作 
void PrintList(Linklist L){
	LNode *p;
	p=L->next;
	printf("该链表为:"); 
	while(p!=NULL){
		printf("%d\t",p->data);
		p=p->next;
	}
	printf("\n");
}
//判空操作 
void Empty(Linklist L){
	if(L->next!=NULL){
		printf("链表不为空\n"); 
	}
	else{
		printf("链表为空\n"); 
	}
}
//销毁链表操作 
void DestroyList(Linklist &L){
	LNode *p;
	while(L->next){
		p=L->next;
		L->next=p->next;
		free(p);
	}	
}
int main(){
	int score;
	Linklist L;

	int e,i;
	LNode *p;
	while(1){
		printf("请输入你的case:\n1:头插法\n2:尾插法\n3:输出\n4:求表长:\n5:判断空链表\n6:销毁链表\n7:按值查找\n8:按位查找\n9:插入操作\n10:删除操作\n");
		printf("你的选择是:");
		scanf("%d",&score);
	    switch(score){
			case 1:head_InitList(L);break;
			case 2:tail_InitList(L);break;
			case 3:PrintList(L);break;
			case 4:Length(L);break;	
			case 5:Empty(L);break;
			case 6:DestroyList(L);break;
			case 7:scanf("%d",&e);p=LocateElem(L,e);printf("找到该节点为:%d\n",p->data); break;
			case 8:scanf("%d",&e);GetElem(L,i);break;
			case 9:scanf("%d",&i);scanf("%d",&e);ListInsert(L,i,e);break;
			case 10:scanf("%d",&i);ListDelete(L,i);break;
			default:break;
	}
	}
	return 0;
} 
举报

相关推荐

0 条评论