数据结构代码实践-1.1单链表各功能实现

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;


typedef struct LNode{
	ElemType data;
	struct LNode* next;
}LNode,*LinkList; 


// 初始化链表
void InitList(LinkList &L){
	L->next = NULL;
}

//头插法创建链表 
void CreatList_head_insert(LinkList &L){
	int x;
	LNode *s;
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;
	scanf("%d",&x);		//根据数据类型改变
	while(x!=9999){
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		s->next = L->next;
		L->next = s;
		
		scanf("%d" ,&x);
	} 
}

//尾插法创建链表
void CreatList_tail_insert(LinkList &L){
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	LNode *s,*r=L;		//这句记得在L申请完地址之后使用 
	scanf("%d",&x);
	while(x!=9999){
		s = (LNode *)malloc(sizeof(LNode));
		s->data = x;
		r->next=s;
		r=s;
		
		scanf("%d",&x);
	}
	r->next = NULL;
} 

//按序号查找结点值
LinkList GetElem(LinkList L,int i){
	int j=1;
	LNode *p = L->next;
	if(i==0){
		return L;
	}
	if(i<1){
		return NULL;
	}
	while(p&&j<i){
		p=p->next;
		j++;
	}
	return p;
} 

//插入结点操作(在第i个位置上插入) 
void InsertElem(LinkList L,int i,ElemType e){
	LinkList p;
	LNode *s;
	s=(LNode*)malloc(sizeof(LNode));
	s->data=e;
	p=GetElem(L,i-1);
	s->next=p->next;
	p->next=s;
}

//删除第i个结点操作
void DeletElem(LinkList L,int i){
	LinkList p,q;
	p=GetElem(L,i-1);
	q=p->next;
	p->next=q->next;
	free(q); 
} 
 
//打印链表 
void PrintList(LinkList L){
	LinkList p;
	for(p=L->next;p;p=p->next){
		printf("%d ",p->data);
	}
	printf("\n");
} 

//判断是不是空表 
bool isEmpty(LinkList L){
	return L->next == NULL;
}

int main(){
	int i,e;
	LinkList L,p;
//	p = (LinkList) malloc (sizeof(LNode));
	printf("===情依次输入数字,以9999结尾\n");
	CreatList_tail_insert(L);
	if(isEmpty(L)){
		printf("表空!\n");
	}
	printf("链表中各结点存储数据为:");
	PrintList(L);
	printf("===请输入想查找第几个节点的值:\n");
	scanf("%d",&i);
	p=GetElem(L,i);
	printf("第%d个结点中的数据为%d\n",i,p->data); 
	printf("===请输入你想在第几个位置插入新的结点:");
	scanf("%d",&i);
	printf("\n===请输入你想在第%d个位置插入的新结点中存储的数据:",i);
	scanf("%d",&e);
	printf("\n");
	InsertElem(L,i,e);
	PrintList(L);
	printf("===请输入想删除第几个结点:");
	scanf("%d",&i);
	DeletElem(L,i);
	printf("删除后的链表为:"); 
	PrintList(L);
	
	/*  测试链表的初始化 
	
	printf("======\n");
	InitList(L);
		if(isEmpty(L)){
		printf("表空!\n");
	}
	PrintList(L);
	*/
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值