algo2-3.c

2024-01-04 10:32
文章标签 algo2

本文主要是介绍algo2-3.c,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 /* algo2-5.c 实现算法2.11、2.12的程序 */
 #include"c1.h"
 typedef int ElemType;
 #include"c2-2.h"
 #include"bo2-2.c"
 #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */

 void CreateList(LinkList *L,int n) /* 算法2.11 */
 { /* 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L */
   int i;
   LinkList p;
   *L=(LinkList)malloc(sizeof(struct LNode));
   (*L)->next=NULL; /* 先建立一个带头结点的单链表 */
   printf("请输入%d个数据\n",n);
   for(i=n;i>0;--i)
   {
     p=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */
     scanf("%d",&p->data); /* 输入元素值 */
     p->next=(*L)->next; /* 插入到表头 */
     (*L)->next=p;
   }
 }

 void CreateList2(LinkList *L,int n)
 { /* 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表L */
   int i;
   LinkList p,q;
   *L=(LinkList)malloc(sizeof(struct LNode)); /* 生成头结点 */
   (*L)->next=NULL;
   q=*L;
   printf("请输入%d个数据\n",n);
   for(i=1;i<=n;i++)
   {
     p=(LinkList)malloc(sizeof(struct LNode));
     scanf("%d",&p->data);
     q->next=p;
     q=q->next;  //q从新指向尾结点。理解的还不是很透彻 if 改为p==q??

   }  

 p->next=NULL;
 }

 void MergeList(LinkList La,LinkList *Lb,LinkList *Lc) /* 算法2.12 */
 { /* 已知单链线性表La和Lb的元素按值非递减排列。 */
   /* 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 */
   LinkList pa=La->next,pb=(*Lb)->next,pc;
   *Lc=pc=La; /* 用La的头结点作为Lc的头结点 */
   while(pa&&pb)
     if(pa->data<=pb->data)
     {
       pc->next=pa;
       pc=pa;
       pa=pa->next;
     }
     else
     {
       pc->next=pb;
       pc=pb;
       pb=pb->next;
     }
   pc->next=pa?pa:pb; /* 插入剩余段 */?????
   free(*Lb); /* 释放Lb的头结点 */
   Lb=NULL;
 }

 void main()
 {
   int n=5;
   LinkList La,Lb,Lc;
   printf("按非递减顺序, ");
   CreateList2(&La,n); /* 正位序输入n个元素的值 */
   printf("La="); /* 输出链表La的内容 */
   ListTraverse(La,print);
   printf("按非递增顺序, ");
   CreateList(&Lb,n); /* 逆位序输入n个元素的值 */
   printf("Lb="); /* 输出链表Lb的内容 */
   ListTraverse(Lb,print);
   MergeList(La,&Lb,&Lc); /* 按非递减顺序归并La和Lb,得到新表Lc */
   printf("Lc="); /* 输出链表Lc的内容 */
   ListTraverse(Lc,print);
 }

 

 

这篇关于algo2-3.c的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569046

相关文章

algo2-3-1.c 教科书中图2.10 静态链表示例

/* c1.h (程序名) */  #include<string.h>  #include<ctype.h>  #include<malloc.h> /* malloc()等 */  #include<limits.h> /* INT_MAX等 */  #include<stdio.h> /* EOF(=^Z或F6),NULL */  #include<stdlib.h> /* atoi

algo2-3-1.c 利用无头结点的单链表结构处理教科书图2.1(学生健康登记表)

/* algo2-6.c 利用无头结点的单链表结构处理教科书图2.1(学生健康登记表) */  #include"c1.h"  #define NAMELEN 8 /* 姓名最大长度 */  #define CLASSLEN 4 /* 班级名最大长度 */  typedef struct  {    char name[NAMELEN+1]; /* 包括'\0' */    long num;

Algo2-2.c

/* algo2-4.c 修改算法2.7的第一个循环语句中的条件语句为开关语句,且当 */  /* *pa=*pb时,只将两者中之一插入Lc。此操作的结果和算法2.1相同 */  #include"c1.h"  typedef int ElemType;  #include"c2-1.h"  #include"bo2-1.c"  #include"func2-3.c" /*