链表的创建按位置查找删除等操作测试

今天刚测试例子不足之处欢迎大家交流

#include <bits/stdc++.h>
using namespace std;
typedef struct Node
{
	int data; //数据域 
	struct Node * next; //指针域 
} *LinkList;
//初始化链表


void InitLinllist(LinkList *L)
{
	(*L) = (LinkList)malloc(sizeof(Node));
	(*L)->next = NULL;
} 
//创建链表头插法 
void creatFormHead (LinkList *L, int n)//链表头指针地址,插入结点个数 
{
	Node *s; //插入结点 
	int m[n];
	for(int i = 0; i < n; i++)
	{ 
		scanf("%d", &m[i]);
		s = (Node*)malloc(sizeof(Node));
		s->data = m[i];
		s->next = (*L)->next;
		(*L)->next = s;
	} 		
}
// 创建链表尾插法
void creatFormTail(LinkList *L, int n)
{
	Node *s, *r;//s待插入结点 r记录尾节点 
	int m[n]; //存放数据域数据   
	r = *L; 
	for(int i = 0; i < n; i++)
	{
		scanf("%d", &m[i]);
		s = (Node*)malloc(sizeof(Node));
		s->data = m[i];
		r->next = s;
		r = s;
	} 
	r->next = NULL;
} 
//searchingLinkList based on positin
LinkList Serchinglist(LinkList *L, int i)  //寻找第 i个元素 
{
	Node *p;//记录被搜索元素
	int j = 0; //记录下一搜索位置 
	p = *L;
	if(i == 0)
		return p;
	else if(i < 0) 
	{
		 printf("输入位置下溢\n");
		 exit(0);
	} 
	while(p != NULL && j < i)
	{
		p = p->next;
		j++;		
	}
	if(p == NULL)
	{
		printf("输入位置上溢");
	}
	else
	{
		return p;
	} 
}
//删除链表 -
bool Linklistdele (LinkList *L, int i) //删除第i个元素
{
	Node *pre, *p; //pre记录被删除的元素的前驱, p记录被删除元素 
	pre =  Serchinglist(L, i - 1);//寻找第i-1个元素 
	p = pre->next;
	if(p == NULL)
	{
		printf("第i个元素下溢\n");
	}
	pre->next = p->next;
	free(p);	
	return true;
} 
//输出链表
void otpList(LinkList L)
{
	Node *p = L->next;
	while(p != NULL)
	{
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
} 
int main()
{
	LinkList L; //头指针;
	int n;
	int m;
	printf("请输入元素个数:\n");
	scanf("%d", &n);
	//初始化链表
	InitLinllist(&L) ;
	//创建链表 
	//creatFormHead (&L, n); //头插法 
	creatFormTail(&L, n);   //尾插法 
	otpList(L);
	printf("你想删除第几个元素:\n");
	scanf("%d", &m);
	Linklistdele (&L, m);
	otpList(L);
	return 0;
} 
 

发布了9 篇原创文章 · 获赞 3 · 访问量 2508

猜你喜欢

转载自blog.csdn.net/mglcms/article/details/88938126
今日推荐