数据结构c语言版答案(C语言数据结构求解)

2024-04-26 09:00:25 :17

数据结构c语言版答案(C语言数据结构求解)

本文目录

C语言数据结构求解

方法很多,可以在插入数据后再对线性表进行删改,也可以在插入前进行处理。

我这里代码是在插入前处理。

(注释掉的函数int getPNUM(struct Sqlist *st,int n);是我预留的,题2如果你想改成插入后,再对线性表素数进行查找,可以用这个函数。否则可以删除)。

#include 《stdio.h》

#include 《stdlib.h》

#include 《time.h》

#define LIST_INIT_SIZE 800

struct Sqlist{

    int *elem;

    int length;

    int listsize;

};

int insert2List(struct Sqlist *st,int num,int inx);//向线性表第inx个元素的位置插入一个元素。成功返回1,失败返回0

int findNum(struct Sqlist *st,int num);//在线性表中查找指定数字,存在返回1,不存在返回0

//int getPNUM(struct Sqlist *st,int n);//查找素数,返回第几n个素数的下标。未找到返回-1

void showList(struct Sqlist *st);//打印线性表

void clearList(struct Sqlist *st);//清空线性表

int main()

{

    int i,k,nums,n,num,cnt,flag;

    struct Sqlist st={nums,0,LIST_INIT_SIZE};

    srand(time(NULL));

//--------------题1-----------------------------------------------------------------------

    n=100;

    k=1;

    printf("1、随机生成100个【100,200】之间的随机数,去除重复并保存到线性表\n");

    while(n--)

    {

        num=rand()%101+100;

        printf("--%3d产生随机数%d\n",k++,num);

        if(findNum(&st,num))

            printf("该数字已在线性表中存在,重复去除\n");

        else

        {

            if(insert2List(&st,num,st.length+1))

                printf("该随机值已保存到线性表尾部\n");

            else{

                printf("异常!插入失败!\n");

                return 1;

            }

        }

    }

    showList(&st);

    clearList(&st);

//-------------题2----------------------------------------------------------------

    n=20;

    cnt=0;

    k=1;

    printf("1、随机生成20个【1,200】之间的随机数,在第一个素数后插入1个0,第二个素数后插入2个0,以此类推,最后输出所有元素\n");

    while(n--)

    {

        num=rand()%200+1;

        printf("--%3d产生随机数%d\n",k++,num);

        flag=1;

        for(i=2;i《num;i++)

            if(num%i==0)

            {

                flag=0;

                break;

            }

        if(flag)

        {

            cnt++;

            printf("该随机值是一个素数,在其尾部插入%d个0\n",cnt);

            for(i=0;i《cnt;i++)

                num*=10;

            printf("该随机值变更为%d\n",num);

        }

        if(insert2List(&st,num,st.length+1))

            printf("该随机值已保存到线性表尾部\n");

        else{

            printf("异常!插入失败!\n");

            return 1;

        }

    }

    showList(&st);

    return 0;

}

void clearList(struct Sqlist *st)//清空线性表

{

    st-》length=0;

    printf("线性表数据已清除\n");

}

void showList(struct Sqlist *st)//打印线性表

{

    int i;

    printf("当前线性表的数据为:\n");

    for(i=0;i《st-》length;i++)

        printf("%d ",st-》elem);

    printf("\n");

}

int findNum(struct Sqlist *st,int num)//在线性表中查找指定数字,存在返回1,不存在返回0

{

    int *p=st-》elem;

    while(p《=&st-》elem)

        if(*p++==num)

            return 1;

    return 0;

}

/*

int getPNUM(struct Sqlist *st,int n)//查找素数,返回第几n个素数的下标。未找到返回-1

{

    int i,j,flag,cnt=0;

    for(i=0;i《st-》length;i++)

    {

        flag=1;

        for(j=2;j《st-》elem;j++)

            if(st-》elem%j==0)

            {

                flag=0;

                break;

            }

        if(flag)

            cnt++;

        if(cnt==n)

            return i;

    }

    return -1;

}

*/

int insert2List(struct Sqlist *st,int num,int inx)//向线性表第inx个元素的位置插入一个元素。成功返回1,失败返回0

{

    int i;

    if(st-》length==st-》listsize)

    {

        printf("线性表已满,插入失败!\n");

        return 0;

    }

    if(inx《1 && inx》st-》length+1)

    {

        printf("插入位置无效!线性表当前数据长度为%d,插入位置必须大于1且不能大于%d!\n",st-》length,st-》length+1);

        return 0;

    }

    for(i=st-》length;i》=inx;i--)

        st-》elem;

    st-》elem=num;

    st-》length++;

    return 1;

}

急需数据结构C语言版(清华大学出版社)的期末考试试题及答案

《数据结构》期末考试试卷( A )一、 选择题(每小题2分,共24分)1.计算机识别、存储和加工处理的对象被统称为( A )A.数据 B.数据元素C.数据结构 D.数据类型2.栈和队列都是( A )A.限制存取位置的线性结构 B.顺序存储的线性结构C.链式存储的线性结构 D.限制存取位置的非线性结构 3.链栈与顺序栈相比,比较明显的优点是( D )A.插入操作更加方便 B.删除操作更加方便C.不会出现下溢的情况 D.不会出现上溢的情况4.采用两类不同存储结构的字符串可分别简称为( B )A.主串和子串 B.顺序串和链串C.目标串和模式串 D.变量串和常量串5. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是:BA. 110 B .108C. 100 D. 120 6.串是一种特殊的线性表,其特殊性体现在:BA.可以顺序存储 B .数据元素是一个字符C. 可以链接存储 D. 数据元素可以是多个字符7.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为: CA. 2h B .2h-1C. 2h+1 D. h+1软件开发网 8.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把 由树转化得到的二叉树叫做这棵树对应的二叉树。下列结论哪个正确? AA. 树的先根遍历序列与其对应的二叉树的先序遍历序列相同B .树的后根遍历序列与其对应的二叉树的后序遍历序列相同C. 树的先根遍历序列与其对应的二叉树的中序遍历序列相同D. 以上都不对9.一个有n个顶点的无向图最多有多少边?CA. n B .n(n-1)C. n(n-1)/2 D. 2n10.在一个图中,所有顶点的度数之和等于所有边数的多少倍?CA. 1/2 B .1C. 2 D. 4 11.当在二叉排序树中插入一个新结点时,若树中不存在与待插入结点的关键字相同的结点,且新结点的关键字小于根结点的关键字,则新结点将成为( A )A.左子树的叶子结点 B.左子树的分支结点C.右子树的叶子结点 D.右子树的分支结点软件开发网 12.对于哈希函数H(key)=key%13,被称为同义词的关键字是( D )A.35和41 B.23和39C.15和44 D.25和51 二、已知某棵二叉树的前序遍历结果为A,B,D,E,G,C,F,H,I,J,其中中序遍历的结果为D,B,G,E,A,H,F,I,J,C。请画出二叉的具体结构。(注意要写出具体步骤)(10分)原理见课本128页三、有图如下,请写出从顶点c0出发的深度优先及宽度优先遍历的结果。(10分) 深度优先;C0-C1-C3-C4-C5-C2宽度优先:C0-C1-C2-C3-C4-C5四、有图如下,按Kruskal算法求出其最小生成树。要求写出完整的步骤。(10分)原理见课本250页五、给定线性表(12,23,45,66,76,88,93,103,166),试写出在其上进行二分查找关键字值12,93,166的过程。并写出二分查找的算法。(20分)0 1 2 3 4 5 6 7 812 23 45 66 76 88 93 103 166过程:mid=(0+8)/2=4high=3,low=0 mid=1high=0,low=0 mid=0(找到12)high=8,low=5,mid=6(找到93)high=8,low=7,mid=7high=8 low=8 mid=8算法:见课本84页上六、知单链表的结点结构为Data next下列算法对带头结点的单链表L进行简单选择排序,使得L中的元素按值从小到大排列。请在空缺处填入合适的内容,使其成为完整的算法。 (可用文字说明该算法的基本思想及执行的过程,10分)void SelectSort(LinkedList L){ LinkedList p,q,min; DataType rcd; p= (1) ; while(p!=NULL) { min=p; q=p-》next; while(q!=NULL){ if( (2) )min=q; q=q-》next; } if( (3) ){ rcd=p-》data; p-》data=min-》data; min-》data=rcd; } (4) ; }} 本题不会。嘿嘿。。。。七、一个完整的算法应该具有哪几个基本性质?分别简要说明每一性质的含意。(5分) 输入:四个基本性质:1.输入:有零个或多个有外部提供的量作为算法的输入 2:输出:算法产生至少一个量作为输出 3.:确定性:组成算法的每条指令是清晰的,无歧异的。 4.:有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的八、何谓队列的"假溢"现象?如何解决?(5分)队列的假溢现象是指数组实现的顺序队列中,队尾指针已到达数组的下表上界产生上溢而队头指针之前还有若干 空间闲置的现象。解决的办法之一是利用循环队列技术使数组空间的首尾相连。 九、说明并比较文件的各种物理结构。(6分)

数据结构c语言版问题

按列为主序存放于一个连续的存储空间中a,2表示第三列(前面有0,1),前面两列就是20第三列6个,得到20+6=26,开始地址为200,则200+26=226

数据结构(C语言版),求高手解决

1.二叉树是度为2的有序树( )【答案】×2.完全二叉树一定存在度为1的结点( )【答案】×3.深度为K的二叉树中结点总数≤2k-1( )【答案】√4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】×5.完全二叉树中,若一个结点没有左孩子,则它必是树叶( )【答案】√6.用二叉链表存储n个结点的二叉树时,结点的2n个指针中有n+1个空指针( )【答案】√7.完全二叉树的存储结构通常采用顺序存储结构( )【答案】√8.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近( )【答案】√9.在中序线索二叉树中,每一非空的线索均指向其祖先结点( )【答案】√【解析】在二叉树上,对有左右子女的结点,其中序前驱是其左子树上按中序遍历的最右边的结点(该结点的后继指针指向祖先),中序后继是其右子树上按中序遍历的最左边的结点(该结点的前驱指针指向祖先)。10.二叉树中序线索化后,不存在空指针域( )【答案】×

求数据结构(C语言版 )的几道题目的答案,希望各位大侠说详细点再此谢过了可发邮箱;379333655@qq.com

冒泡排序法:#include《stdio.h》 void main() { int a={24,70,12,85,106,08},i,k,temp; for(k=0;k《6;k++) {for(i=k+1;i《6;i++) if(a) {temp=a; a; a=temp; } printf(" %d",a); } getch(); }选择排序:#include "stdio.h"#define N 6main(){ int i,j,k,t; int a; printf("请输入六位数:\n"); for(i=0;i《N;i++) scanf("%d",&a); for(i=0;i《N-1;i++) { k=i; for(j=i+1;j《N;j++) if(a) k=j; if(i!=k) { t=a; a; a=t; } } for(i=0;i《N;i++) printf("%d\t",a); printf("\n");}插入排序法:#include "stdio.h"#define N 6main(){ int i,j,k; int a; printf("请输入六位数:\n"); for(i=0;i《N;i++) scanf("%d",&a); for(i=0;i《N;i++) { k=a; j=i-1; while(j》=0&&k《a) { a; j--; } a=k; } for(i=0;i《N;i++) printf("%d\t",a); printf("\n");} shell排序法:#include "stdio.h"#define N 6main(){ int i,j,k,m,flag; int a={24,70,12,85,106,08}; m=N; while(m》1) { m=(m+1)/2; do { flag=0; for(i=0;i《N-m;i++) { j=i+m; if(a) { k=a=k;flag=1; } } }while(flag); } for(i=0;i《N;i++) printf("%d ",a); printf("\n");}

数据结构 (c语言版)胡学纲 课后习题 答案谢谢了,大神帮忙啊

数据结构课程第一章部分习题解答 第一章 绪论 1-4.什么是抽象数据类型?试用C++的类声明定义“复数”的抽象数据类型。要求 (1) 在复数内部用浮点数定义它的实部和虚部。 (2) 实现3个构造函数:缺省的构造函数没有参数;第二个构造函数将双精度浮点数赋给复数的实部,虚部置为0;第三个构造函数将两个双精度浮点数分别赋给复数的实部和虚部。 (3) 定义获取和修改复数的实部和虚部,以及+、-、*、/等运算的成员函数。 (4) 定义重载的流函数来输出一个复数。 【解答】 抽象数据类型通常是指由用户定义,用以表示应用问题的数据模型。抽象数据类型由基本的数据类型构成,并包括一组相关的服务。 //在头文件complex.h中定义的复数类 #ifndef _complex_h_ #define _complex_h_ #include class comlex { public: complex ( ){ Re = Im = 0; } //不带参数的构造函数 complex ( double r ) { Re = r; Im = 0; } //只置实部的构造函数 complex ( double r, double i ) { Re = r; Im = i; } //分别置实部、虚部的构造函数 double getReal ( ) { return Re; } //取复数实部 double getImag ( ) { return Im; } //取复数虚部 void setReal ( double r ) { Re = r; } //修改复数实部 void setImag ( double i ) { Im = i; } //修改复数虚部 complex & operator = ( complex & ob) { Re = ob.Re; Im = ob.Im; } //复数赋值 complex & operator + ( complex & ob ); //重载函数:复数四则运算 complex & operator – ( complex & ob ); complex & operator * ( complex & ob ); complex & operator / ( complex & ob ); friend ostream & operator 《《 ( ostream & os, complex & c ); //友元函数:重载《《 private: double Re, Im; //复数的实部与虚部 }; #endif //复数类complex的相关服务的实现放在C++源文件complex.cpp中 #include #include #include “complex.h” complex & complex :: operator + ( complex & ob ) { //重载函数:复数加法运算。 complex * result = new complex ( Re + ob.Re, Im + ob.Im ); return *result; } complex & complex :: operator – ( complex & ob ) { //重载函数:复数减法运算 complex *result = new complex ( Re – ob.Re, Im – ob.Im ); return * result; } complex & complex :: operator * ( complex & ob ) { //重载函数:复数乘法运算 complex *result = new complex ( Re * ob.Re – Im * ob.Im, Im * ob.Re + Re * ob.Im ); return *result; } complex & complex :: operator / ( complex & ) { //重载函数:复数除法 查看更多答案》》

数据结构(c语言版)题目求答案

3.28void InitCiQueue(CiQueue&Q)//初始化循环链表表示的队列Q{Q=(CiLNode*)malloc(sizeof(CiLNode));Q-》next=Q;}//InitCiQueuevoidEnCiQueue(CiQueue&Q,int x)//把元素x插入循环列表表示的队列Q,Q指向队尾元素,Q-》next指向头结点,Q-》next-》next指向队尾元素{p=(CiLNode*)malloc(sizeof(CiLNode));p-》data=x;p-》next=Q-》next;//直接把p加在Q的后面Q-》next=p;Q=p;//修改尾指针}Status DeCiQueue(CiQueue&Q,int x)//从循环链表表示的队列Q头部删除元素x{if(Q==Q-》next)return INFEASIBLE;//队列已空p=Q-》next-》next;x=p-》data;Q-》next-》next=p-》next;free(p);rturn OK;}//DeCiqueue3.31int Palindrome_Test(){InitStack(S);InitQueue(Q);while((c=getchar())!=’@’){Push(S,c);EnQueue(Q,c);}while(!StackEmpty(S)){pop(S,a);DeQueue(Q,b);if(a!=b)return ERROR;}return OK;}

清华大学严蔚敏数据结构题集完整答案(c语言版)

第一章 绪论 1.16 void print_descending(int x,int y,int z)//按从大到小顺序输出三个数 { scanf("%d,%d,%d",&x,&y,&z); if(x《y) x《-》y; //《-》为表示交换的双目运算符,以下同 if(y《z) y《-》z; if(x《y) x《-》y; //冒泡排序 printf("%d %d %d",x,y,z); }//print_descending 1.17 Status fib(int k,int m,int &f)//求k阶斐波那契序列的第m项的值f { int tempd; if(k《2||m《0) return ERROR; if(m《k-1) f=0; else if (m==k-1) f=1; else { for(i=0;i《=k-2;i++) temp=0; temp=1; //初始化 for(i=k;i《=m;i++) //求出序列第k至第m个元素的值 { sum=0; for(j=i-k;j《i;j++) sum+=temp; temp=sum; } f=temp; } return OK; }//fib 分析:通过保存已经计算出来的结果,此方法的时间复杂度仅为O(m^2).如果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(k^m). 1.18 typedef struct{ char *sport; enum{male,female} gender; char schoolname; //校名为’A’,’B’,’C’,’D’或’E’ char *result; int score; } resulttype; typedef struct{ int malescore; int femalescore; int totalscore; } scoretype; void summary(resulttype result数组中 { scoretype score ; i=0; while(result.sport!=NULL) { switch(result.schoolname) { case ’A’: score.score; if(result.score; else score.score; break; case ’B’: score .totalscore+=result.score; if(result.score; else score .femalescore+=result.score; break; …… …… …… } i++; } for(i=0;i《5;i++) { printf("School %d:\n",i); printf("Total score of male:%d\n",score.malescore); printf("Total score of female:%d\n",score.femalescore); printf("Total score of all:%d\n\n",score.totalscore); } }//summary 1.19 Status algo119(int a)//求i!*2^i序列的值且不超过maxint { last=1; for(i=1;i《=ARRSIZE;i++) { a=last*2*i; if((a/last)!=(2*i)) reurn OVERFLOW; last=a; return OK; } }//algo119 分析:当某一项的结果超过了maxint时,它除以前面一项的商会发生异常. 1.20 void polyvalue() { float ad; float *p=a; printf("Input number of terms:"); scanf("%d",&n); printf("Input the %d coefficients from a0 to a%d:\n",n,n); for(i=0;i《=n;i++) scanf("%f",p++); printf("Input value of x:"); scanf("%f",&x); p=a;xp=1;sum=0; //xp用于存放x的i次方 for(i=0;i《=n;i++) { sum+=xp*(*p++); xp*=x; } printf("Value is:%f",sum); }//polyvalue第二章 线性表 2.10 Status DeleteK(SqList &a,int i,int k)//删除线性表a中第i个元素起的k个元素{ if(i《1||k《0||i+k-1》a.length) return INFEASIBLE; for(count=1;i+count-1《=a.length-k;count++) //注意循环结束的条件 a.elem; a.length-=k; return OK;}//DeleteK 2.11Status Insert_SqList(SqList &va,int x)//把x插入递增有序表va中{ if(va.length+1》va.listsize) return ERROR; va.length++; for(i=va.length-1;va.elem》x&&i》=0;i--) va.elem; va.elem=x; return OK;}//Insert_SqList 2.12 int ListComp(SqList A,SqList B)//比较字符表A和B,并用返回值表示结果,值为正,表示A》B;值为负,表示A《B;值为零,表示A=B{ for(i=1;A.elem;i++) if(A.elem; return 0;}//ListComp 2.13 LNode* Locate(LinkList L,int x)//链表上的元素查找,返回指针{ for(p=l-》next;p&&p-》data!=x;p=p-》next); return p;}//Locate 2.14 int Length(LinkList L)//求链表的长度{ for(k=0,p=L;p-》next;p=p-》next,k++); return k;}//Length 2.15 void ListConcat(LinkList ha,LinkList hb,LinkList &hc)//把链表hb接在ha后面形成链表hc{ hc=ha;p=ha; while(p-》next) p=p-》next; p-》next=hb;}//ListConcat 2.16 见书后答案. 2.17 Status Insert(LinkList &L,int i,int b)//在无头结点链表L的第i个元素之前插入元素b{ p=L;q=(LinkList*)malloc(sizeof(LNode)); q.data=b; if(i==1) { q.next=p;L=q; //插入在链表头部 } else { while(--i》1) p=p-》next; q-》next=p-》next;p-》next=q; //插入在第i个元素的位置 }}//Insert 2.18 Status Delete(LinkList &L,int i)//在无头结点链表L中删除第i个元素{ if(i==1) L=L-》next; //删除第一个元素 else { p=L; while(--i》1) p=p-》next; p-》next=p-》next-》next; //删除第i个元素 }}//Delete 2.19 Status Delete_Between(Linklist &L,int mink,int maxk)//删除元素递增排列的链表L中值大于mink且小于maxk的所有元素{ p=L; while(p-》next-》data《=mink) p=p-》next; //p是最后一个不大于mink的元素 if(p-》next) //如果还有比mink更大的元素 { q=p-》next; while(q-》data《maxk) q=q-》next; //q是第一个不小于maxk的元素 p-》next=q; }}//Delete_Between 2.20 Status Delete_Equal(Linklist &L)//删除元素递增排列的链表L中所有值相同的元素{ p=L-》next;q=p-》next; //p,q指向相邻两元素 while(p-》next) { if(p-》data!=q-》data) { p=p-》next;q=p-》next; //当相邻两元素不相等时,p,q都向后推一步 } else { while(q-》data==p-》data) { free(q); q=q-》next; } p-》next=q;p=q;q=p-》next; //当相邻元素相等时删除多余元素 }//else }//while}//Delete_Equal 2.21 void reverse(SqList &A)//顺序表的就地逆置{ for(i=1,j=A.length;i《j;i++,j--) A.elem;}//reverse 2.22 void LinkList_reverse(Linklist &L)//链表的就地逆置;为简化算法,假设表长大于2{ p=L-》next;q=p-》next;s=q-》next;p-》next=NULL; while(s-》next) { q-》next=p;p=q; q=s;s=s-》next; //把L的元素逐个插入新表表头 } q-》next=p;s-》next=q;L-》next=s;}//LinkList_reverse分析:本算法的思想是,逐个地把L的当前元素q插入新的链表头部,p为新表表头. 2.23 void merge1(LinkList &A,LinkList &B,LinkList &C)//把链表A和B合并为C,A和B的元素间隔排列,且使用原存储空间{ p=A-》next;q=B-》next;C=A; while(p&&q) { s=p-》next;p-》next=q; //将B的元素插入 if(s) { t=q-》next;q-》next=s; //如A非空,将A的元素插入 } p=s;q=t; }//while}//merge1 2.24 void reverse_merge(LinkList &A,LinkList &B,LinkList &C)//把元素递增排列的链表A和B合并为C,且C中元素递减排列,使用原空间{ pa=A-》next;pb=B-》next;pre=NULL; //pa和pb分别指向A,B的当前元素 while(pa||pb) { if(pa-》data《pb-》data||!pb) { pc=pa;q=pa-》next;pa-》next=pre;pa=q; //将A的元素插入新表 } else { pc=pb;q=pb-》next;pb-》next=pre;pb=q; //将B的元素插入新表 } pre=pc; } C=A;A-》next=pc; //构造新表头}//reverse_merge分析:本算法的思想是,按从小到大的顺序依次把A和B的元素插入新表的头部pc处,最后处理A或B的剩余元素. 2.25 void SqList_Intersect(SqList A,SqList B,SqList &C)//求元素递增排列的线性表A和B的元素的交集并存入C中{ i=1;j=1;k=0; while(A.elem) { if(A.elem) i++; if(A.elem) j++; if(A.elem) { C.elem; //当发现了一个在A,B中都存在的元素, i++;j++; //就添加到C中 } }//while}//SqList_Intersect 2.26 void LinkList_Intersect(LinkList A,LinkList B,LinkList &C)//在链表结构上重做上题{ p=A-》next;q=B-》next; pc=(LNode*)malloc(sizeof(LNode)); while(p&&q) { if(p-》data《q-》data) p=p-》next; else if(p-》data》q-》data) q=q-》next; else { s=(LNode*)malloc(sizeof(LNode)); s-》data=p-》data; pc-》next=s;pc=s; p=p-》next;q=q-》next; } }//while C=pc;}//LinkList_Intersect 2.27 void SqList_Intersect_True(SqList &A,SqList B)//求元素递增排列的线性表A和B的元素的交集并存回A中{ i=1;j=1;k=0; while(A.elem) { if(A.elem) i++; else if(A.elem) j++; else if(A.elem) { A.elem; //当发现了一个在A,B中都存在的元素 i++;j++; //且C中没有,就添加到C中 } }//while while(A.elem=0;}//SqList_Intersect_True 2.28 void LinkList_Intersect_True(LinkList &A,LinkList B)//在链表结构上重做上题{ p=A-》next;q=B-》next;pc=A; while(p&&q) { if(p-》data《q-》data) p=p-》next; else if(p-》data》q-》data) q=q-》next; else if(p-》data!=pc-》data) { pc=pc-》next; pc-》data=p-》data; p=p-》next;q=q-》next; } }//while}//LinkList_Intersect_True 2.29 void SqList_Intersect_Delete(SqList &A,SqList B,SqList C) { i=0;j=0;k=0;m=0; //i指示A中元素原来的位置,m为移动后的位置 while(i《A.length&&j《B.length&& k《C.length) { if(B.elem) j++; else if(B.elem) k++; else { same=B.elem; //找到了相同元素same while(B.elem==same) j++; while(C.elem==same) k++; //j,k后移到新的元素 while(i《A.length&&A.elem《same) A.elem; //需保留的元素移动到新位置 while(i《A.length&&A.elem==same) i++; //跳过相同的元素 } }//while while(i《A.length) A.elem; //A的剩余元素重新存储。 A.length=m; }// SqList_Intersect_Delete分析:先从B和C中找出共有元素,记为same,再在A中从当前位置开始, 凡小于same的元素均保留(存到新的位置),等于same的就跳过,到大于same时就再找下一个same. 2.30 void LinkList_Intersect_Delete(LinkList &A,LinkList B,LinkList C)//在链表结构上重做上题{ p=B-》next;q=C-》next;r=A-next; while(p&&q&&r) { if(p-》data《q-》data) p=p-》next; else if(p-》data》q-》data) q=q-》next; else { u=p-》data; //确定待删除元素u while(r-》next-》data《u) r=r-》next; //确定最后一个小于u的元素指针r if(r-》next-》data==u) { s=r-》next; while(s-》data==u) { t=s;s=s-》next;free(t); //确定第一个大于u的元素指针s }//while r-》next=s; //删除r和s之间的元素 }//if while(p-》data=u) p=p-》next; while(q-》data=u) q=q-》next; }//else }//while}//LinkList_Intersect_Delete 2.31 Status Delete_Pre(CiLNode *s)//删除单循环链表中结点s的直接前驱{ p=s; while(p-》next-》next!=s) p=p-》next; //找到s的前驱的前驱p p-》next=s; return OK;}//Delete_Pre 2.32 Status DuLNode_Pre(DuLinkList &L)//完成双向循环链表结点的pre域{ for(p=L;!p-》next-》pre;p=p-》next) p-》next-》pre=p; return OK;}//DuLNode_Pre 2.33 Status LinkList_Divide(LinkList &L,CiList &A,CiList &B,CiList &C)//把单链表L的元素按类型分为三个循环链表.CiList为带头结点的单循环链表类型.{ s=L-》next; A=(CiList*)malloc(sizeof(CiLNode));p=A; B=(CiList*)malloc(sizeof(CiLNode));q=B; C=(CiList*)malloc(sizeof(CiLNode));r=C; //建立头结点 while(s) { if(isalphabet(s-》data)) { p-》next=s;p=s; } else if(isdigit(s-》data)) { q-》next=s;q=s; } else { r-》next=s;r=s; } }//while p-》next=A;q-》next=B;r-》next=C; //完成循环链表}//LinkList_Divide 2.34 void Print_XorLinkedList(XorLinkedList L)//从左向右输出异或链表的元素值{ p=L.left;pre=NULL; while(p) { printf("%d",p-》data); q=XorP(p-》LRPtr,pre); pre=p;p=q; //任何一个结点的LRPtr域值与其左结点指针进行异或运算即得到其右结点指针 }}//Print_XorLinkedList 2.35 Status Insert_XorLinkedList(XorLinkedList &L,int x,int i)//在异或链表L的第i个元素前插入元素x{ p=L.left;pre=NULL; r=(XorNode*)malloc(sizeof(XorNode)); r-》data=x; if(i==1) //当插入点在最左边的情况 { p-》LRPtr=XorP(p.LRPtr,r); r-》LRPtr=p; L.left=r; return OK; } j=1;q=p-》LRPtr; //当插入点在中间的情况 while(++j《i&&q) { q=XorP(p-》LRPtr,pre); pre=p;p=q; }//while //在p,q两结点之间插入 if(!q) return INFEASIBLE; //i不可以超过表长 p-》LRPtr=XorP(XorP(p-》LRPtr,q),r); q-》LRPtr=XorP(XorP(q-》LRPtr,p),r); r-》LRPtr=XorP(p,q); //修改指针 return OK;}//Insert_XorLinkedList 2.36 Status Delete_XorLinkedList(XorlinkedList &L,int i)//删除异或链表L的第i个元素{ p=L.left;pre=NULL; if(i==1) //删除最左结点的情况 { q=p-》LRPtr; q-》LRPtr=XorP(q-》LRPtr,p); L.left=q;free(p); return OK; } j=1;q=p-》LRPtr; while(++j《i&&q) { q=XorP(p-》LRPtr,pre); pre=p;p=q; }//while //找到待删结点q if(!q) return INFEASIBLE; //i不可以超过表长 if(L.right==q) //q为最右结点的情况 { p-》LRPtr=XorP(p-》LRPtr,q); L.right=p;free(q); return OK; } r=XorP(q-》LRPtr,p); //q为中间结点的情况,此时p,r分别为其左右结点 p-》LRPtr=XorP(XorP(p-》LRPtr,q),r); r-》LRPtr=XorP(XorP(r-》LRPtr,q),p); //修改指针 free(q); return OK;}//Delete_XorLinkedList 2.37 void OEReform(DuLinkedList &L)//按1,3,5,...4,2的顺序重排双向循环链表L中的所有结点{ p=L.next; while(p-》next!=L&&p-》next-》next!=L) { p-》next=p-》next-》next; p=p-》next; } //此时p指向最后一个奇数结点 if(p-》next==L) p-》next=L-》pre-》pre; else p-》next=l-》pre; p=p-》next; //此时p指向最后一个偶数结点 while(p-》pre-》pre!=L) { p-》next=p-》pre-》pre; p=p-》next; } p-》next=L; //按题目要求调整了next链的结构,此时pre链仍为原状 for(p=L;p-》next!=L;p=p-》next) p-》next-》pre=p; L-》pre=p; //调整pre链的结构,同2.32方法}//OEReform分析:next链和pre链的调整只能分开进行.如同时进行调整的话,必须使用堆栈保存偶数结点的指针,否则将会破坏链表结构,造成结点丢失. 2.38 DuLNode * Locate_DuList(DuLinkedList &L,int x)//带freq域的双向循环链表上的查找{ p=L.next; while(p.data!=x&&p!=L) p=p-》next; if(p==L) return NULL; //没找到 p-》freq++;q=p-》pre; while(q-》freq《=p-》freq) q=q-》pre; //查找插入位置 if(q!=p-》pre) { p-》pre-》next=p-》next;p-》next-》pre=p-》pre; q-》next-》pre=p;p-》next=q-》next; q-》next=p;p-》pre=q; //调整位置 } return p;}//Locate_DuList 2.39 float GetValue_SqPoly(SqPoly P,int x0)//求升幂顺序存储的稀疏多项式的值{ PolyTerm *q; xp=1;q=P.data; sum=0;ex=0; while(q-》coef) { while(ex《q-》exp) xp*=x0; sum+=q-》coef*xp; q++; } return sum;}//GetValue_SqPoly 2.40 void Subtract_SqPoly(SqPoly P1,SqPoly P2,SqPoly &P3)//求稀疏多项式P1减P2的差式P3{ PolyTerm *p,*q,*r; Create_SqPoly(P3); //建立空多项式P3 p=P1.data;q=P2.data;r=P3.data; while(p-》coef&&q-》coef) { if(p-》exp《q-》exp) { r-》coef=p-》coef; r-》exp=p-》exp; p++;r++; } else if(p-》exp《q-》exp) { r-》coef=-q-》coef; r-》exp=q-》exp; q++;r++; } else { if((p-》coef-q-》coef)!=0) //只有同次项相减不为零时才需要存入P3中 { r-》coef=p-》coef-q-》coef; r-》exp=p-》exp;r++; }//if p++;q++; }//else }//while while(p-》coef) //处理P1或P2的剩余项 { r-》coef=p-》coef; r-》exp=p-》exp; p++;r++; } while(q-》coef) { r-》coef=-q-》coef; r-》exp=q-》exp; q++;r++; }}//Subtract_SqPoly 2.41 void QiuDao_LinkedPoly(LinkedPoly &L)//对有头结点循环链表结构存储的稀疏多项式L求导{ p=L-》next; if(!p-》data.exp) { L-》next=p-》next;p=p-》next; //跳过常数项 } while(p!=L) { p-》data.coef*=p-》data.exp--;//对每一项求导 p=p-》next; }}//QiuDao_LinkedPoly 2.42 void Divide_LinkedPoly(LinkedPoly &L,&A,&B)//把循环链表存储的稀疏多项式L拆成只含奇次项的A和只含偶次项的B{ p=L-》next; A=(PolyNode*)malloc(sizeof(PolyNode)); B=(PolyNode*)malloc(sizeof(PolyNode)); pa=A;pb=B; while(p!=L) { if(p-》data.exp!=2*(p-》data.exp/2)) { pa-》next=p;pa=p; } else { pb-》next=p;pb=p; } p=p-》next; }//while pa-》next=A;pb-》next=B; }//Divide_LinkedPoly

数据结构c语言版答案(C语言数据结构求解)

本文编辑:admin

更多文章:


怎么形容爸爸的爱呢?爸爸的爱就像什么

怎么形容爸爸的爱呢?爸爸的爱就像什么

本文目录怎么形容爸爸的爱呢爸爸的爱就像什么爸爸的爱是什么样子的呢怎样形容爸爸的爱爸爸的爱作文400字爸爸的爱像什么爸爸的爱是什么爸爸的爱怎样形容爸爸的爱有哪些四种父亲节爱心早餐食谱,表达对爸爸的爱怎么形容爸爸的爱呢一、爸爸的爱就像火焰阳光,

2024年8月2日 17:10

电力工程造价师报考条件?电力系统需要工程造价人员吗

电力工程造价师报考条件?电力系统需要工程造价人员吗

本文目录电力工程造价师报考条件电力系统需要工程造价人员吗电力工程实施阶段造价的管理电力工程预算怎么做电力造价属于什么专业,电力造价属于什么专业知识电力工程造价和人力资源管理哪个专业好电力工程造价的知识能干电工工作吗浅谈如何控制电力设计的造价

2024年9月14日 21:10

小学数学评课(小学数学听课评课评语)

小学数学评课(小学数学听课评课评语)

本文目录小学数学听课评课评语小学数学评课优秀评语小学数学如何评课及评课的语言小学数学优缺点评课怎么写怎样评小学数学课小学数学评课应从哪几方面来评怎样评课小学数学课圆的认识小学数学评课稿沪教版小学四年级下册数学《小数加减法》评课稿新人教版小学

2024年8月5日 01:00

狼的翻译和原文蒲松龄(狼的文言文原文及翻译)

狼的翻译和原文蒲松龄(狼的文言文原文及翻译)

本文目录狼的文言文原文及翻译蒲松龄狼原文翻译蒲松龄的狼原文及翻译蒲松龄的《狼》翻译,1句原文,1句翻译狼的文言文原文及翻译   导语:《狼三则》选自《聊斋志异》。清代蒲松龄(1640—1715)所著《聊斋志异》卷六。描绘了贪婪、凶狠、狡诈的

2024年9月15日 04:00

幼儿怎么学英语(5种方法让孩子轻松学英语)

幼儿怎么学英语(5种方法让孩子轻松学英语)

本文目录5种方法让孩子轻松学英语幼儿学英语的方法和技巧教孩子学习英语的方法幼儿怎么学英语怎样教幼儿学英语幼儿学习英语的方法有哪些幼儿学英语的好方法幼儿学习英语的方法有哪些这三种简单却高效幼儿英语怎样教学5种方法让孩子轻松学英语蹦蹦跳跳学英文

2024年7月30日 20:30

员工活动游戏(员工培训时用得上的15个游戏)

员工活动游戏(员工培训时用得上的15个游戏)

本文目录员工培训时用得上的15个游戏公司员工早会小游戏员工大会可以玩那些游戏呢员工年会互动游戏公司集体活动游戏方案员工聚会小游戏员工培训时用得上的15个游戏 员工培训时用得上的15个游戏   玩游戏也是员工培训的一种方法,通过游戏提

2024年8月29日 18:10

问一下i find与i think i feel 的用法区别?同花顺的ifind是什么

问一下i find与i think i feel 的用法区别?同花顺的ifind是什么

本文目录问一下i find与i think i feel 的用法区别同花顺的ifind是什么同花顺与iFind有什么区别ifind登录不了问一下i find与i think i feel 的用法区别你好,三者都没区别,都可以用Ifind/t

2024年4月3日 20:00

小学生劳动感悟20字(劳动小能手感言20字是什么)

小学生劳动感悟20字(劳动小能手感言20字是什么)

本文目录劳动小能手感言20字是什么学生劳动感悟怎么写劳动心得体会小学生2022小学生做家务的感言一年级劳动感言怎么写小学生劳动感言一句话有哪些劳动小能手感言20字是什么劳动小能手感言:1、劳动是光荣的崇高的神圣的,是创造文明的一个伟大写照。

2024年6月7日 17:10

刑事上诉状的格式?刑事上诉状要交几份

刑事上诉状的格式?刑事上诉状要交几份

本文目录刑事上诉状的格式刑事上诉状要交几份刑事的上诉状刑事上诉状交给谁刑事案件上诉状怎么写刑事上诉状应该怎么写打架刑事上诉状怎么写刑事上诉状的格式法律主观:一、 刑事上诉状 需提交几份1、正本一份;2、副本:按被告人数每人一份+法院一份+检

2024年8月17日 20:10

求二战将军的战争名言最好是薛岳,隆美尔,蒙哥马利,巴顿的?隆美尔名言 隆美尔的经典名言都有哪些

求二战将军的战争名言最好是薛岳,隆美尔,蒙哥马利,巴顿的?隆美尔名言 隆美尔的经典名言都有哪些

本文目录求二战将军的战争名言最好是薛岳,隆美尔,蒙哥马利,巴顿的隆美尔名言 隆美尔的经典名言都有哪些德国日本、以色列,有什么出名的军人他们有什么名言二战德军将领的名言有哪些求隆美尔名言隆美尔名言二战名将英语名言隆美尔《步兵进攻》名言隆美尔说

2024年8月24日 06:30

梁静茹的歌,歌词里有错过和过错这两个词?爱人错过的歌词

梁静茹的歌,歌词里有错过和过错这两个词?爱人错过的歌词

本文目录梁静茹的歌,歌词里有错过和过错这两个词爱人错过的歌词苏遇的《错过》 歌词祁隆的《错过》 歌词错过以后歌词错过歌词梁咏琪的《错过》 歌词梁咏琪《错过》的歌词李晟的《错过》 歌词李晟,错过,歌词梁静茹的歌,歌词里有错过和过错这两个词  

2024年3月21日 10:30

中学生应该如何树立正确的消费观?中学生的消费习惯

中学生应该如何树立正确的消费观?中学生的消费习惯

本文目录中学生应该如何树立正确的消费观中学生的消费习惯中学生消费类型中学生如何合理消费中学生高消费的危害中学生作为一个消费群体有哪些特点中学生的消费观中学生高消费的原因有哪些(政治)中学生应该怎样合理消费目前中学生的消费观念有哪些,中学生的

2024年8月28日 01:10

个人汇报材料(行政个人总结报告)

个人汇报材料(行政个人总结报告)

本文目录行政个人总结报告2022年度总结报告个人范文(精选3篇)2023年述职个人报告推荐6篇个人工作总结报告怎么写2022个人年度工作总结报告(3篇)优秀共产党员先进事迹工作汇报材料村个人先进事迹材料参考8篇行政个人总结报告 行政个人总结

2024年7月5日 17:30

景海鹏为什么三次飞天(景海鹏作为中国航天第一人,曾3次登上太空,如今现状如何)

景海鹏为什么三次飞天(景海鹏作为中国航天第一人,曾3次登上太空,如今现状如何)

本文目录景海鹏作为中国航天第一人,曾3次登上太空,如今现状如何景海鹏:心态清零三上太空航天员景海鹏有几次登上太空景海鹏的航天梦是什么航天员景海鹏:“我非常渴望再上一次太空”50岁的少将景海鹏为何成为中国首个三进太空的人中国航天“钉子户”,三

2024年3月4日 14:10

工商注册制度(工商注册程序及注意事项)

工商注册制度(工商注册程序及注意事项)

本文目录工商注册程序及注意事项工商注册:工商注册公司流程是怎样的个体工商户注册号规则是什么如何进行工商注册我国对公司实行的是注册登记制度公司注册登记管理规定【工商注册】新公司注册流程详解注册公司需要什么条件我国目前实行的工商登记制度是了解工

2024年6月27日 14:50

未来的高科技产品(近些年科技飞速发展,有哪些“中国制造”走出国门,走向世界)

未来的高科技产品(近些年科技飞速发展,有哪些“中国制造”走出国门,走向世界)

本文目录近些年科技飞速发展,有哪些“中国制造”走出国门,走向世界高科技电子产品有哪些大家来说说目前有哪些人工智能的高科技产品最新高科技产品未来十大高科技有哪些有哪些高科技产品未来有哪些高科技未来技术有哪些高科技产品有哪些有哪些高科技产品发明

2024年4月8日 10:00

马年快到了,马字开头的祝福语,有朋友知道吗谢谢,急求?2014年春节祝福语:含马字的新春祝福

马年快到了,马字开头的祝福语,有朋友知道吗谢谢,急求?2014年春节祝福语:含马字的新春祝福

本文目录马年快到了,马字开头的祝福语,有朋友知道吗谢谢,急求2014年春节祝福语:含马字的新春祝福马年拜年吉祥语马年春节祝福成语马年大吉大利春节祝福语2014马年快到了,马字开头的祝福语,有朋友知道吗谢谢,急求马年大吉喜气临,昂首摆尾迎春来

2024年8月6日 15:20

我的老师教案(七年级语文课文我的老师教案)

我的老师教案(七年级语文课文我的老师教案)

本文目录七年级语文课文我的老师教案我的好老师大班教案【我最尊敬的老师作文教案】 我的老师教案2020五年级语文上册我的老师教案优秀范文锦集幼儿园小班我的老师教案我的老师大班教案大班语言教案《说说我的老师》七年级语文上册第6课《我的老师》教案

2024年9月8日 05:00

大自然包括哪些?大自然指什么

大自然包括哪些?大自然指什么

本文目录大自然包括哪些大自然指什么享受大自然的心情说说句子享受大自然的心情说说什么叫大自然享受大自然的心情说说精选(精选61句)大自然是什么大自然什么意思大自然有什么享受大自然的心情的说说大自然包括哪些大自然包括陆地、海洋、空气、动植物等。

2024年7月16日 10:30

正比例和反比例(什么叫做反比例和正比例)

正比例和反比例(什么叫做反比例和正比例)

本文目录什么叫做反比例和正比例什么叫正比例和反比例什么是正比例什么是反比例反比例和正比例的概念正比例和反比例数学正比例和反比例什么叫正比例,什么叫反比例什么是正比例与反比例什么是正比例,什么是反比例什么是正比,什么是反比什么叫做反比例和正比

2024年7月3日 09:50