结构体链表

3 篇文章 0 订阅

今天写了一下结构体链表,相比顺序链表而言,要相对复杂,但其中没有合并操作,以后在写,这个结构体链表不够成熟,但相对简单的操作还是可行的,下面是代码:

//结构体实现聊表
//提供如下操作 1制空(Making_empty),2判空(Is_empty),4插入(Insert_sag),5查找(Search_sag),6删除(Delete_sag),8退出(exit),7合并(Connect_two_sag)
#include <stdio.h>
#include <stdlib.h>

typedef int data_type;	
typedef struct Por
{
	data_type data;
	struct Por *next;
}sag,*sag_head;

void Making_empty(sag *&);
bool Is_empty(sag *&);
void Insert_sag(sag *&,data_type);
void Search_sag(sag *&,data_type);
void Delete_sag(sag *&,data_type);
//void Connect_two_sag(sag *,sag *,sag *);

int main()
{
	sag_head head=NULL;
	data_type data;
	while(true)
	{
	printf("选择你的命令:\n \
		   1-------制空  \n \
		   2-------插入  \n \
		   3-------查找  \n \
		   4-------删除  \n \
		   5-------合并  \n \
		   6-------退出  \n");
	int trag;
	scanf("%d",&trag);
	switch(trag)
	{
case 1: Making_empty(head);break;
case 2: 
	printf("print you wanted data: \n");
	scanf("%d",&data);
	Insert_sag(head,data);break;
case 3:
	printf("print your searching data: \n");
	scanf("%d",&data);
	Search_sag(head,data);break;
case 4:
	printf("print your deleting data: \n");
	scanf("%d",&data);
	Delete_sag(head,data);break;
case 5:
	//Connect_two_sag(head1,head2,head);
	break;
case 6:
	printf("are you really want to exit Y(y) / N(n)\n");
	char ch;
	getchar();
	ch=getchar();
	while(ch==' ' && ch!=EOF)
		ch=getchar();
	switch(ch)
	{
case 'Y': case 'y':exit(0);
case 'N': case 'n':printf("\n");break;
	} break;
default:
	printf("wrong,enter the new operating number\n");
	}
	}
}

void Making_empty(sag *&p){
   sag_head q=p;
   while(q!=NULL){
	   p=p->next;
	   free(q);
	   q=p;
   }
}
bool Is_empty(sag *&p){
	return p==NULL;
}
void Insert_sag(sag *&p,data_type x)
{
	sag_head q=(sag_head)malloc(sizeof(*q));
	q->data=x;
	//printf("%d\n",q->data);
	sag_head pre=NULL,cur=p;
	for( ;  cur!=NULL &&  cur->data<q->data;pre=cur,cur=cur->next);
	if(pre==NULL){
		q->next=p;
		p=q;
		//printf("%d\n",p->data);
		return ;
	}
	pre->next=q;
	q->next=cur;
}
void Search_sag(sag *&p,data_type x)
{
	//printf("%d\n",);
	int i=1;
	for(sag_head q=p;q!=NULL;q=q->next,i++)
		if(q->data==x){
			printf("exists in %d\n",i);
			return ;
		}
		printf("no exists\n");
}
void Delete_sag(sag *&p,data_type x)
{
	if(Is_empty(p)){
		printf("sag empty! \n");
		return ;
	}
	sag_head pre=NULL,cur=p;
	for( ;cur->data!=x && cur!=NULL;pre=cur,cur=cur->next);
	if(pre==NULL){
		p=p->next;
		free(cur);
		return ;
	}
	if(cur==NULL){
		printf("%d no exist in sag\n",&x);
		return ;
	}
	pre->next=cur->next;
	free(cur);
}

	
	
	
	

	
	
	
	

	

	
	
		

	


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值