单链表的基本运算

实现单链表的基本运算:初始化、插入、删除、求表的长度、判空、释放。
(1)初始化单链表L,输出L->next的值;
(2)依次采用尾插法插入元素:输入分两行数据,第一行是尾插法需要插入的字符数据的个数,第二行是具体插入的字符数据。
(3)输出单链表L;
(4)输出单链表L的长度;
(5)判断单链表L是否为空;
(6)输出单链表L的第3个元素;
(7)输出元素a的位置;
(8)在第4个元素位置上插入‘x’元素;
(9)输出单链表L;
(10)删除L的第3个元素;
(11)输出单链表L;
(12)释放单链表L。

输入格式:

两行数据,第一行是尾插法需要插入的字符数据的个数,第二行是具体插入的字符数据。

输出格式:

按照题目要求输出

输入样例:

5
a b c d e

输出样例:

0
a b c d e
5
no
c
1
a b c x d e

a b x d e

#include <stdio.h>
#include <malloc.h>   //malloc 头文件

typedef struct List         //链表的节点
{
	char data;
	struct List *next;
}*ListNode, listnode;
 
bool initList(ListNode& node)  //注意返回值   链表初始化 
{
	node = (ListNode)malloc(sizeof(listnode));
	node->next = NULL;

	return node->next!=NULL;
}


void createList(ListNode& node, char a[],int num)   //链表产生  输入由外部传入
{
	char data;
	ListNode tempNode, pMove;
	pMove = node;
	for (int j =0; j<num; j++)
	{
		tempNode = (ListNode)malloc(sizeof(listnode));
		pMove->next = tempNode;                          //使用了尾插        
		tempNode->data = a[j];
		tempNode->next = NULL;                
		pMove = tempNode;
	}
}
void//打印
输出链表 show(ListNode node)                   
{
	ListNode pMove=node->next;
	while (pMove != NULL)               //循环遍历
	{	
		printf("%c", pMove->data);   
		if (pMove->next != NULL)		//为了题目需要最后一个不输出空格
			printf(" ");
		pMove = pMove->next;	

	}
	printf("\n");
}

int showLen(ListNode node)        //返回链表长度  
{
	ListNode p = node->next;
	int i=0;
	while (p)                    
	{
		i++;
		p = p->next;
	}
	return i;
}

bool showEmpty(ListNode node)       //判断链表是否为空
{
	return node->next == NULL;
}

char showEle(ListNode node, int num)   //判断num位置的元素
{
	ListNode temp = node;

	for (int i = 0; i<num; ++i) 
	{
		temp = temp->next;
	}
	return temp->data;

}

int showLocate(ListNode node, char data)      //判断data数据的位子
{
	int i = 0;
	ListNode temp = node;
	while (temp->data != data&&temp!=NULL)
	{
		i++;
		temp = temp->next;
	}
	if (temp == NULL)
		return 0;
	else
		return i;
}

bool insertEle(ListNode& node, int num, char data)  //插入数据
{
	if (num <= 0)						//判断num是否是有效值
		return false;
	ListNode pTemp = node;
	for (int i = 0; i<num - 1; ++i)    //  插入需要找到插入的前一个点
	{
		pTemp = pTemp->next;            
	}		
	if (pTemp==NULL)     
		return false;
	else
	{
		ListNode temp = (ListNode)malloc(sizeof(listnode));
		temp->data = data;
		temp->next = pTemp->next;		 
		pTemp->next = temp;
		return true;
	}

}

bool deleteEle(ListNode& node, int num)   //删除第i个元素
{
	if (num <= 0)                        
		return false;
	ListNode temp = node,p;
	for (int i = 0; i<num - 1&&temp!=NULL; i++)  //找到删除数据的前一个节点
	{
		temp = temp->next;
	}
	if (temp==NULL&&temp->next==NULL)      //判断删除点的前一个点和删除点是否为空如果有一个为空说明该点不存在
		return false;
	else
	{
		p = temp->next;                  //断开删除点的指针
		temp->next = p->next;
		free(p);						//释放删除点
		return true;
	}

}

void deleteList(ListNode& node)  //删除链表
{
	ListNode p = node, q;
	while (p != NULL)
	{
		q = p->next;
		free(p);
		p = q;
	}
	node = NULL;
}

int main()
{
	ListNode text;
	int num;	
	scanf("%d", &num);    //输入数据个数
	char *data=(char*)malloc(sizeof(char)*(num+1));
	for (int i = 0; i < num; ++i)     //输入数据
	{
		getchar();
		scanf("%c", &data[i]);
	}
	bool a = initList(text);
	createList(text,data,num);
        printf("%d\n", a);
	show(text);
        //略


	return 0;
}

最后输出没有写完整,希望同学们要看一下函数内容自行调用函数。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值