8.7数据结构单链表作业

头文件

#ifndef _LLJ_H_
#define _LLJ_H_

typedef char datatype;   //类型重命名

typedef struct Node
{
    union
	{
	    datatype data;
		int len;
	};
	struct Node *next;
}Node,*Linklistptr;

//创建链表
Linklistptr list_create();

//判空操作
int list_empty(Linklistptr L);

//申请结点封装数据函数
Linklistptr node_buy(datatype e);

//头插
int list_insert_head(Linklistptr L,datatype e);

//遍历
void list_show(Linklistptr L);

//尾插
int list_insert_tail(Linklistptr L,datatype e);

//任意位置插入
int list_insert_post(Linklistptr L,int pos,datatype e);

//头删
int list_delete_head(Linklistptr L);

//尾删
int list_delete_tail(Linklistptr L);

//任意位置删除
int list_delete_pos(Linklistptr L,int pos);

//按位置查找返回结点
Linklistptr list_search_pos(Linklistptr L,int pos);

//按值查找返回节点位置
int list_search_value(Linklistptr L,datatype e);

//按位置进行修改
int list_update_pos(Linklistptr L,int pos,datatype e);

//按值进行修改
int list_update_value(Linklistptr L,datatype old_e,datatype new_e);

//链表排序
void list_paixu(Linklistptr L);

//链表的反转
void list_reverse(Linklistptr L);

//递归实现链表的反转

//返回链表长度
int list_length(Linklistptr L);

//链表的销毁
void list_free(Linklistptr L);
#endif

源文件

//按位置进行修改
int list_update_pos(Linklistptr L,int pos,datatype e)
{
    if(NULL==L||list_empty(L)||pos<0||pos>L->len)
	{
	    printf("修改失败\n");
		return 0;
	}

   	 Linklistptr q=list_search_pos(L,pos);
       q->data=e;          //修改

	printf("修改成功\n");

	return 1;
}

//按值进行修改
int list_update_value(Linklistptr L,datatype old_e,datatype new_e)
{
    if(NULL==L||list_empty(L)||old_e==new_e)
	{
	    printf("修改失败\n");
		return 0;
	}

	Linklistptr q=L->next;  //找到第一个结点

      for(int i=1;i<L->len;i++)  //遍历所有结点
	  {
	    if(q->data==old_e)
		{
		    q->data=new_e;
		}
          q=q->next;
	  }

	  printf("按值修改成功\n");
	  return 1;
}

//链表的排序
void list_paixu(Linklistptr L)
{
  if(NULL==L||list_empty(L))
  {
      printf("排序失败\n");
  }
      char temp;
      Linklistptr q=L->next;

      for(int i=1;i<L->len;i++)
	  {
		  q=L->next;
	   for(int j=1;j<L->len;j++)
	   {
	      if(q->data-'A' > q->next->data-'A')
		  {
		      temp=q->data;
			 q->data=q->next->data;
			 q->next->data=temp;
		  }  
		     q=q->next;
	   }
	  }

}

测试文件

int main(int argc, const char *argv[])
{
	Linklistptr L=list_create();
	if(NULL == L)
	{
	    return -1;
	}

	//调用头插函数
	list_insert_head(L,'Q');
	list_insert_head(L,'W');
	list_insert_head(L,'E');
	list_insert_head(L,'R');

 /*    //调用遍历函数
	 list_show(L);
     
	 //调用任意位置插入函数
	 list_insert_post(L,3,'D');
	 
	 //调用尾插函数
	 list_insert_tail(L,'G');

     //调用头删函数
	 list_delete_head(L);

	 //调用任意位置删除函数
	 list_delete_pos(L,3);

	 //调用尾删函数
	 list_delete_tail(L);   */

     //调用按位置进行修改函数
	 list_update_pos(L,3,'A');

	 //按值进行修改
	 list_update_value(L,'R','B');

	 //链表的排序
	 list_paixu(L);

	 //遍历
	 list_show(L);

	 //释放空间
	 list_free(L);
	 L=NULL;

	 list_show(L);

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值