数据结构的一些题目(C语言)

Python025

数据结构的一些题目(C语言),第1张

1.

int lenth(LNode * head)

{

LNode *p

int i

p=head

while(p)

{

++i

p=p->next

}

return i

}

2.

int max(LNode * head)

{

LNode *p

LNode *q

elemtype maxelem//具体的数据类型我不知道,所以用了elemtype

p=head

maxelem=p->data

while(p)

{

p=p->next

if(p->data >maxekem)

{

maxelem=p->data

q=p /*将最大的位置记录下来*/

}

p=head

while(p!=q)

{

p=p->next

++i /*找到最大值的位子,并记录是第几个节点*/

}

return i /*在一个函数中只能有一个返回值,最大值你可以打印出来,这里我就不写了*/

}

}

3、

int inset_after(LNode *head,x,y)

{

LNode *p

LNode *q

p=head

while(p &&p->data!=x)

p=p->next

if(!p) return 0//没有找到

q=(LNode *)malloc(sizeof(LNode))

q->data=y

q->next=p->next

p->next=q

return 1//找到

}

4、int merge(LNode *L)

{

LNode *p

LNode *q

int i

q=L

p=create()

p->next=p->next->next//去除头结点

i=5

while(q &&i<0) //如果要插入的带头结点的链表的话,是i<=0

{ q=q->next

i--

if(!p) return 0//要插入的链表的结点数小于5,退出,返回0

}

1.

随意画几个二叉树就知道了,这里空链域用ε表示,数一数结点个数与ε个数就知道是n+1了

2.

具体过程在图中给出。

3.

第一步将数据(假设为e)放入s的data中;

第二步s的后继指向q的后继节点;

第三步q的后继指向s

4.

查找72只需2步:

第一步:设立low、high与mid指针,将72与mid指向的值即48比较;

第二部:72比48大,low指向mid+1,重新算出mid,指向72,再与72比较,即查找成功。

最多比较次数参考严蔚敏《数据结构》第九章 查找 220页。

5.

例如图中这棵树,假设i=2,2i=4不大于n,2i+1=5大于n,所以2这个结点没有右子树。

6.

顺序栈的类型定义:

typedef struct{

    char *base        //也可用ElemType,只要定义了就行

    char *top

    int stacksize

}SqStackTp        //注意名字要和主函数里的统一

运行结果:

ABCDEFGHIJKLM

MLKJIHGFEDCBA

结果详解:

在这里将'A'到'A'+12='M'进栈同时输出

for(ch=’A’ch<=’A’+12ch++)

{  Push(&sq,ch)

printf(“%c”,ch)

}

在这里将'A'到'M'出栈同时输出

while(!EmptyStack(sq))

{  Pop(&sq,&ch)

printf(“&c”,ch)

}  printf(“\n”)

由于栈是后进先出,所以就有这样的结果

7.

void converse(int n,int d){

    SqStack S        //新建一个栈

    InitStack(S)     //初始化栈

    int k,e

    while(n>0){

        k=n%d

        push(S,k)

        n=n/d

    }//将余数进栈

    while(S.top!=S.base){

        pop(S,e)

        printf("%1d",e)

    }//输出结果

}

8.

先序遍历:ABCDEF

中序遍历:BCDAFE

后序遍历:DCBFEA

3.28

void InitCiQueue(CiQueue&Q)//初始化循环链表表示的队列Q

{

Q=(CiLNode*)malloc(sizeof(CiLNode))

Q->next=Q

}//InitCiQueue

voidEnCiQueue(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

}//DeCiqueue

3.31

int 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

}