⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 62.c

📁 这是一个经过本人一个月的时间自己做的关于c的小程序
💻 C
字号:
/*链表的各种功能*/
#include<stdio.h>
typedef char datatype;
typedef struct node
{
	datatype data;
	struct node *next;
} linklist;

linklist *head_cha();
linklist *bottom_cha();
linklist *bottom_cha1();
linklist *get(linklist *head,int i);
linklist *deletedata(linklist *head,int i);
linklist *insertdata(linklist *head,datatype ch,int i);
linklist *nixu(linklist *head);
linklist *nixu1(linklist *head);
void lianbiao()
{
	linklist *h,*p,*q,*r,*s,*t;
	int x,i;
	scanf("%d",&x);
	switch(x)
	{
	case 1:
		h=head_cha();
		printf("反序打印字符:\n");
		break;
	case 2:	
		h=bottom_cha();
		printf("正序打印字符:\n");
		break;
	case 3:
		h=bottom_cha1();
		printf("正序打印字符:\n");
		break;
	default:
		printf("error!");
		break;
	}

	r=h;
	while(r!=NULL)
	{
		printf("%c",r->data);
		r=r->next;
	}
	printf("\n");

	printf("enter the number:\n");
	scanf("%d",&i);

	p=get(h,i);
	printf("%c",p->data);
	printf("\n");

	s=insertdata(h,'o',i);
	while(s!=NULL)
	{
		printf("%c",s->data);
		s=s->next;
	}
	printf("\n");

	q=deletedata(h,i);
	while(q!=NULL)
	{
		printf("%c",q->data);
		q=q->next;
	}
	

	printf("\n");

	t=nixu1(h);
	while(t!=NULL)
	{
		printf("%c",t->data);
		t=t->next;
	}
	printf("\n");
//	nixu1(h);
/*	while(h!=NULL)
	{
		printf("%c",h->data);
		h=h->next;
	}
	printf("\n");
*/

}

linklist *head_cha()//头插法
{
	char ch;
	linklist *head,*s;
	head=NULL;
	printf("(头插法)请输入字符:\n");
	ch=getchar();
	while(ch!='#')
	{
		s=(linklist*)malloc(sizeof(linklist));
		s->data=ch;
		s->next=head;
		head=s;
		ch=getchar();
	}

	return head;

}
linklist *bottom_cha()//尾插法
{
	 char ch;
	 linklist *head,*s,*r;
	 head=NULL;
	 r=head;
	 printf("(尾插法)请输入字符:\n");
	 ch=getchar();
	 while(ch!='#')
	 {
		s=(linklist*)malloc(sizeof(linklist));
		s->data=ch;
		if(head==NULL) head=s;
		else r->next=s;
		r=s;
		ch=getchar();
	 }
	 if(r!=NULL)
		 r->next=NULL;
	 return head;
	
}
linklist *bottom_cha1()//带接点的尾插法
{
	 char ch;
	 linklist *head,*s,*r;
	 head=(linklist*)malloc(sizeof(linklist));
	 r=head;
	 printf("(带头接点的尾插法)请输入字符:\n");

	 ch=getchar();
	 while(ch!='#')
	 {
		s=(linklist*)malloc(sizeof(linklist));
		s->data=ch;
//		if(head==NULL) head=s;
//		else 
		r->next=s;
		r=s;
		ch=getchar();
	 }
	 if(r!=NULL)
		 r->next=NULL;
	 return head;
}

linklist *get(linklist *head,int i)//获取第i个元素
{
	linklist *p;
	int j=0;
	p=head;
	if(p==NULL)
		printf("the lianbiao is NULL!");
	while((p!=NULL)&&(j<i))
	{
		p=p->next;
		j++;
	}
	if(j==0)
		printf("the number overflow !");
	return p;


}
linklist *deletedata(linklist *head,int i)//删除第i个元素
{
	linklist *p,*q;
	int j=0;
	p=head;
	if(p==NULL)
		printf("the lianbiao is NULL!");
	while((p!=NULL)&&(j<i))
	{	

		p=p->next;
		j++;
	}
	if(!(p->next)||j==0)
		printf("the number overflow !");
	q=p->next;
	p->next=q->next;


	return head;
}
linklist *insertdata(linklist *head,datatype ch,int i)//将元素插入第i个元素
{
	linklist *p,*s;
	int j=0;
	p=head;
	if(p==NULL)
		printf("the lianbiao is NULL!");
	while((p!=NULL)&&(j<i))
	{	

		p=p->next;
		j++;
	}
	if(!(p->next)||j==0)
		printf("the number overflow !");
	s=(linklist *)malloc(sizeof(linklist));
	s->data=ch;
//	q=p->next;
	s->next=p->next;
	p->next=s;
//	free(q);
//	p->next=q->next;


	return head;

}

linklist *nixu(linklist *head) //逆序输出单链表
{
	linklist *p,*r,*s;
	r=head;
	p=NULL;
	while(r->next!=NULL)
	{
		s=(linklist*)malloc(sizeof(linklist));
		s->data=r->data;
		r=r->next;
		s->next=p;
		p=s;
	}
	return p;
}

linklist *nixu1(linklist *head)//逆序输出单链表
{
	linklist *s,*r,*p; //定义三个指向链表头三个节点的指针
	s=head;
	p=s->next;
	r=p->next;
	if(r==NULL)
	{
		p->next=s;
		s=p;
	}
	while(r!=NULL)
	{
		if(s==head)
		{
			s->next=NULL;
		}
		p->next=s;
		s=p;
		
		p=r;
		r=r->next;
	}
//	p=head;
	return s;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -