当前位置:   article > 正文

线性表基本操作和简单程序——c语言_c语言线性表的简单创建和操作

c语言线性表的简单创建和操作

 分别以头插法和尾插法建立两个数据域定义为整型的升序单链表,再将这两个有序链表合并成一个新的无重复元素的有序链表,最后可以根据输入的数据,先找到相应的结点,后删除之。


<span style="font-size:18px;">#include<stdio.h>
#include<stdlib.h>

typedef struct node{
    int  data;
    struct node *next;
}node;

node * qbuild(node *first)     //头插法
{
	int i,n,a[100];
	node *s;
	printf("输入n:");
	scanf("%d",&n);
	first=(node*)malloc(sizeof(node));
	first->next=NULL;
	for(i=0;i<n;i++)
	{
		s=(node*)malloc(sizeof(node));
		printf("输入a[%d]:",i);
	    scanf("%d",&a[i]);
        s->data=a[i];
		s->next=first->next;
		first->next=s;
	}	
	return first;
}

   
node * hbuild(node *first)         //尾插发
{
	int i,n,a[100];
	struct node *s,*r;
	printf("输入n:");
	scanf("%d",&n);
	first=(node*)malloc(sizeof(node));
	r=first;
	for(i=0;i<n;i++)
	{
	
		s=(node*)malloc(sizeof(node));
        printf("输入a[%d]:",i);
	    scanf("%d",&a[i]);
		s->data=a[i];
		r->next=s;
        r=s;
	}
	r->next=NULL;
	return first; 

}
 
node * hebing(node *La,node *Lb)         // 将两个有序链表合并
{
	node *pa,*pb,*pc,*Lc;
	pa=La->next;
	pb=Lb->next;
	Lc=pc=La;
	while(pa && pb)
	{
		if(pa->data < pb->data){
			pc->next =pa;
			pc=pa;
			pa=pa->next ;
		}
		
		else if(pa->data > pb->data){
			pc->next =pb;
			pc=pb;
			pb=pb->next;
		}
		
	    else{
            pc->next =pa;
			pc=pa;
			pa=pa->next ;
			pb=pb->next ;
		}
		
	}
	pc->next =pa?pa:pb;
	free(Lb);
    return Lc;
}

node * shanchu(node *first,int i)          //删除一个链表中的一个字符
{
    node *p,*q;
	p=first->next;
	while(p)
    {
		if((p->next )->data==i)
		{
		   q=p->next  ;
		   p->next =q->next;
		   free(q);
		   break;
		}
		   p=p->next;
	}
	return first;
}

void display(node *first)
{
	struct node *p;
	p=first->next;
	while(p!=NULL)
    {
		printf("%d ",p->data);
		p=p->next;
	
	}
    printf("\n");
}

int main()                           //主函数
{   
	int m;
	struct node *a,*b,*c;
    a=qbuild(a);
    printf("打印链表a:");
    display(a);
    
		
    b=hbuild(b);
    printf("打印链表b:");
    display(b);
   
    c=hebing(a,b);
    printf("打印链表c:");
	display(c);

	printf("输入删除的数m:");
	scanf("%d",&m);
	c=shanchu(c,m);
	printf("打印删除后的链表c:");
	display(c);

    return 0;
}</span>
输入输出实例;

输入n:5
输入a[0]:9
输入a[1]:5
输入a[2]:4
输入a[3]:3
输入a[4]:1
打印链表a:1 3 4 5 9
输入n:5
输入a[0]:1
输入a[1]:3
输入a[2]:4
输入a[3]:6
输入a[4]:8
打印链表b:1 3 4 6 8
打印链表c:1 3 4 5 6 8 9
输入删除的数m:5
打印删除后的链表c:1 3 4 6 8 9


--------------------------------
Process exited after 32.78 seconds with return value 0
请按任意键继续. . .





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/529424
推荐阅读
相关标签
  

闽ICP备14008679号