??xml version="1.0" encoding="utf-8" standalone="yes"?>国产午夜精品久久久久九九电影 ,久久99精品国产麻豆蜜芽,久久国产乱子伦免费精品http://m.shnenglu.com/deercoder/articles/102117.html刘畅刘畅Fri, 27 Nov 2009 13:48:00 GMThttp://m.shnenglu.com/deercoder/articles/102117.htmlhttp://m.shnenglu.com/deercoder/comments/102117.htmlhttp://m.shnenglu.com/deercoder/articles/102117.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102117.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102117.html题目如下Q?br>1Q设某二叉树的结点类型ؓ整数cdQ以二叉链表形式作ؓ存储l构。试~程实现Q?br>(1) 生成一二叉树.
(2) 用递归法、非递归法实现二叉树的遍历Q?br>(3) 求度分别???的结点的数目,分别用递归法、非递归法实现Q?br>(4) 按层ơ遍历二叉树(提示Q用一个队列实玎ͼQ?br>*(5) 求二叉树的高?深度)Q?br>*(6) 判断是否为完全二叉树Q输?Yes!'/'No!'Q?br>*(7) 交换每个l点的左叛_树;
*(8) 对交换左叛_树后的二叉树作中序遍历?br>#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define ERROR  0
#define OK  1
#define OVERFLOW -2
#define queuesize 20
typedef struct BiTNode{
    int data;
    struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
typedef struct Queue{
     int front ,rear ;
     BiTree data[queuesize]; //循环队列元素cdZ叉链表结Ҏ?br>     int count;
}Queue; //循环队列l构定义

int CreateBiTree(BiTree * T) { //声明的就是一个BiTreecd的指?通过修改来对main中的T做修改,然后使其指向根结?br>  // 按先序次序输入二叉树中结点的|一个字W)Q空格字W表C空树,
  // 构造二叉链表表C的二叉树T?br>  int ch;
  printf("误入一个根l点的|如果为空Q则输入0Q\n");
  scanf("%d",&ch);
  if (ch==0) (*T)= NULL;
  else {
    if (!(*T = (BiTNode *)malloc(sizeof(BiTNode))))  return ERROR;
    (*T)->data = ch;              // 生成根结?br>    CreateBiTree(&(*T)->lchild);   // 构造左子树
    CreateBiTree(&(*T)->rchild);   // 构造右子树
  }
  return OK;
} // CreateBiTree

int PreOrderTraverse(BiTree T) //用递归法写的遍历函数Q按照先序遍历,同时输出l点的?br>{
    if(T!=NULL)
    {
        printf("%d  ",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
    return OK;
}

int InorderTraverse(BiTree T)
{
    if(T!=NULL)
    {
        InorderTraverse(T->lchild);
        printf("%d ",T->data);
        InorderTraverse(T->rchild);
    }
    return OK;
}
int PreOrderTraverse2(BiTree T)  //用非递归的算法写的遍历函敎ͼ按照先序遍历Q同时输出结点的?br>{
   BiTree p,s[20];
   int top=0;
   p=T;
   while((p!=NULL)||(top>0))
   {
       while(p!=NULL)
       {
           printf("%d ",p->data);
           s[++top]=p;
           p=p->lchild;
       }
       p=s[top--];
       p=p->rchild;
   }
   return OK;
}

int get_all_node(BiTree T)  //求出ȝl点的个?br>{
   BiTree p,s[20];
   int num_node=0;
   int top=0;
   p=T;
   while((p!=NULL)||(top>0))
   {
       while(p!=NULL)
       {
           num_node++;
           s[++top]=p;
           p=p->lchild;
       }
       p=s[top--];
       p=p->rchild;
   }
   return num_node;
}

int get_node0_1(BiTree T)//利用递归法得到度ؓ0的结点的个数
{
    int num1,num2;
    if(T==NULL)
        return 0;
    else
    {
        if((T->lchild==NULL)&&(T->rchild==NULL))
            return 1;
        else
        {
            num1=get_node0_1(T->lchild);
            num2=get_node0_1(T->rchild);
            return (num1+num2);
        }
    }
}
int get_node0_2(BiTree T) //利用非递归法Q同旉用层ơ遍历的ҎQ得到度?的结? 
{
     Queue *q;
     BiTree p=T;
     int num=0;
     q=(Queue *)malloc(sizeof(Queue));
     q->front=0;
     q->rear=0;
     q->data[q->rear]=p;
     q->rear++;
     while(q->front < q->rear)
     {
         p=q->data[q->front];
         q->front++;
         if(p->lchild==NULL && p->rchild==NULL)
         {
             num++;
         }
         if(p->lchild!=NULL)
         {
             q->data[q->rear]=p->lchild;
             q->rear++;
         }
         if(p->rchild!=NULL)
         {
             q->data[q->rear]=p->rchild;
             q->rear++;
         }
     }
    return num;
}

int get_node1(BiTree T) //利用ȝ关系求出度ؓ1的结点的个数
{
    int num=get_all_node(T)-2*get_node0_1(T)+1;
    return num;
}
int get_node1_1(BiTree T)   //非递归法Q同时利用关pL度ؓ1的结炏V?br>{
    int num=get_all_node(T)-2*get_node0_2(T)+1;
    return num;
}
int get_node2(BiTree T) //利用度ؓ2的结点个C度ؓ0的结点个数的关系得到
{
    int num=get_node0_1(T)-1;
    return num;
}
int get_node2_1(BiTree T)   //非递归法Q同时利用关pL度ؓ2的结炏V?br>{
    int num=get_node0_2(T)-1;
    return num;
}
int get_node(BiTree T)
{
    int get;
   printf("误入你要查扄l点的度\n");
   printf("1.查询度ؓ0的所有结点的个数\n");
   printf("2.查询度ؓ1的所有结点的个数\n");
   printf("3.查询度ؓ2的所有结点的个数\n");
   scanf("%d",&get);
   switch(get){
   case 1:
      printf("度ؓ0的所有结点的个数?d\n",get_node0_1(T));
      break;
   case 2:
       printf("度ؓ1的所有结点的个数?d\n",get_node1(T));
       break;
   case 3:
       printf("度ؓ2的所有结点的个数?d\n",get_node2(T));
       break;
   }
   return OK;
}
int get_node_1(BiTree T)        //利用非递归法的实?br>{
    int get;
    printf("下面是用非递归法来查询\n");
   printf("误入你要查扄l点的度\n");
   printf("1.查询度ؓ0的所有结点的个数\n");
   printf("2.查询度ؓ1的所有结点的个数\n");
   printf("3.查询度ؓ2的所有结点的个数\n");
   scanf("%d",&get);
   switch(get){
   case 1:
      printf("度ؓ0的所有结点的个数?d\n",get_node0_2(T));
      break;
   case 2:
       printf("度ؓ1的所有结点的个数?d\n",get_node1_1(T));
       break;
   case 3:
       printf("度ؓ2的所有结点的个数?d\n",get_node2_1(T));
       break;
   }
   return OK;
}
int LevelOrder(BiTree T)
   Queue *q;
     BiTree p;
     int flag=0;                      //定义flag为层?br>     q=(Queue *)malloc(sizeof(Queue));  //甌循环队列I间
     q->rear=q->front=q->count=0;      //@环队列初始化为空
     q->data[q->rear]=T;
     q->count++;
     q->rear=(q->rear+1)%queuesize;       //根l点入队
     while (q->count)                   //若队列不为空Q做以下操作
         if(q->data[q->front]){            //当队首元素不为空指针Q做以下操作
             p=q->data[q->front];           //取队首元?p
             printf("%d ",p->data);        //打印*pl点的数据域信息
             ++flag;
             q->front=(q->front+1)%queuesize;
             q->count--;       //队首元素出队
             if (q->count==queuesize)//若队列ؓ队满Q则打印队满信息Q退出程序的执行
                 printf("the queue full!\n");
             else{            //若队列不满,?pl点的左孩子指针入队
                 q->count++;q->data[q->rear]=p->lchild;
                 q->rear=(q->rear+1)%queuesize;
                                   //enf of if
             if (q->count==queuesize)        //若队列ؓ队满Q则打印队满信息Q退出程序的执行
                 printf("the queue full!\n");
             else{                      //若队列不满,?pl点的右孩子指针入队
                 q->count++;q->data[q->rear]=p->rchild;
                 q->rear=(q->rear+1)%queuesize;
                                         //end of if
                                       //end of if
         else{                          //当队首元素ؓI指针,空指针出队
             q->front=(q->front+1)%queuesize;
             q->count--;
         }
         printf("\n");
         return OK;
     //end of LevelOrder

int height(BiTree T)
{
    BiTree p=T;
    int a,b;
    if(p==NULL)
        return 0;
    else{
       if((p->lchild==NULL)&&(p->rchild==NULL))
            return 1;
    else{
          a=height(p->rchild);
          b=height(p->lchild);
          if(a>b)   return (a+1);
          else    return (b+1);
          }
    }
}

int judge(BiTree T)   //采用递归法来实现判断是否ؓ完全二叉?br>{
      if(T ==NULL)  
          return   0;  
      if(T->lchild == NULL && T->rchild== NULL)  
          return   1;   
      if(T->lchild  == NULL  && T->rchild != NULL||T->lchild!=NULL &&T->rchild==NULL)  
          return   0;  
      return   judge(T->lchild) & judge(T->rchild);  

}

int exchange(BiTree T)
{
     BiTree p=T;
     int exch;
     if(p==NULL)
         return OK;
     else
     {
         if(p->lchild!=NULL && p->rchild!=NULL)
         {
             exch=p->lchild->data;
             p->lchild->data=p->rchild->data;
             p->rchild->data=exch;
             exchange(p->lchild);
             exchange(p->rchild);
         }
         else
         {
             if(p->lchild==NULL)
                 exchange(p->rchild);
             else
                 exchange(p->lchild);
         }
         return OK;
     }
}

void main()
{
    BiTree T;         //定义一个指向BiTNodel点的指?br>    int choice;
    do{
    printf("\n");
    printf("请选择操作Q\n");
    printf("1.按照先序的次序生成一颗二叉树\n");
    printf("2.递归法实现二叉树的先序遍历Q输出各l点值\n");
    printf("3.用非递归法实现二叉树的遍历Q输出各l点值\n");
    printf("4.求度分别???的结点的数目Q递归法实现Q\n");
    printf("5.求度分别???的结点的数目Q非递归法实现Q\n");
    printf("6.按层ơ遍历二叉树\n");
    printf("7.求二叉树的高?深度)\n");
    printf("8.判断是否为完全二叉树Q输出\"Yes!\"或\"No!\"\n");
    printf("9.交换每个l点的左叛_?q用先序遍历的方式输出\n");
    printf("10.对交换左叛_树后的二叉树作中序遍历\n");
    printf("11.退出\n");
    scanf("%d",&choice);
    switch(choice){
    case 1:
        CreateBiTree(&T);   //创徏二叉?br>        break;
    case 2:
        PreOrderTraverse(T); //利用递归法的先序遍历,输出l点?br>        break;
    case 3:
        PreOrderTraverse2(T);//利用非递归法的先序遍历,输出l点?br>        break;
    case 4:
        get_node(T); //利用递归法得到的各个结点的个数
        break;
    case 5:
        get_node_1(T);  //利用非递归法得到的各个结点的个数
        break;
    case 6:
        LevelOrder(T);
        break;
    case 7:
        printf("二叉树的高度?d\n",height(T));
        break;
    case 8:
        if(judge(T)==0)
            printf("No\n");
        else
            printf("Yes\n");
        break;
    case 9:
         exchange(T);
         PreOrderTraverse(T);
         break;
    case 10:
         InorderTraverse(T);
         break;
       
    }while(choice!=11);    
}

注记Q原来的那个函数5有问题,卛_用非递归法求叶子结点的个数?br>


刘畅 2009-11-27 21:48 发表评论
]]>
二叉树的操作http://m.shnenglu.com/deercoder/articles/102109.html刘畅刘畅Fri, 27 Nov 2009 13:36:00 GMThttp://m.shnenglu.com/deercoder/articles/102109.htmlhttp://m.shnenglu.com/deercoder/comments/102109.htmlhttp://m.shnenglu.com/deercoder/articles/102109.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102109.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102109.html题目如下Q?br>1Q设某二叉树的结点类型ؓ整数cdQ以二叉链表形式作ؓ存储l构。试~程实现Q?br>(1) 生成一二叉树.
(2) 用递归法、非递归法实现二叉树的遍历Q?br>(3) 求度分别???的结点的数目,分别用递归法、非递归法实现Q?br>(4) 按层ơ遍历二叉树(提示Q用一个队列实玎ͼQ?br>*(5) 求二叉树的高?深度)Q?br>*(6) 判断是否为完全二叉树Q输?Yes!"/"No!"Q?br>*(7) 交换每个l点的左叛_树;
*(8) 对交换左叛_树后的二叉树作中序遍历?br>

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define ERROR  0
#define OK  1
#define OVERFLOW -2
#define queuesize 20
typedef struct BiTNode{
    int data;
    struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
typedef struct Queue{
    int front ,rear ;
     BiTree data[queuesize]; //循环队列元素cdZ叉链表结Ҏ?br>     int count;
}Queue; //循环队列l构定义

int CreateBiTree(BiTree * T) { //声明的就是一个BiTreecd的指?通过修改来对main中的T做修改,然后使其指向根结?br>  // 按先序次序输入二叉树中结点的|一个字W)Q空格字W表C空树,
  // 构造二叉链表表C的二叉树T?br>  int ch;
  printf("误入一个根l点的|如果为空Q则输入0Q\n");
  scanf("%d",&ch);
  if (ch==0) (*T)= NULL;
  else {
    if (!(*T = (BiTNode *)malloc(sizeof(BiTNode))))  return ERROR;
    (*T)->data = ch;              // 生成根结?br>    CreateBiTree(&(*T)->lchild);   // 构造左子树
    CreateBiTree(&(*T)->rchild);   // 构造右子树
  }
  return OK;
} // CreateBiTree

int PreOrderTraverse(BiTree T) //用递归法写的遍历函数Q按照先序遍历,同时输出l点的?br>{
    if(T!=NULL)
    {
        printf("%d  ",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }
    return OK;
}

int InorderTraverse(BiTree T)
{
    if(T!=NULL)
    {
        InorderTraverse(T->lchild);
        printf("%d ",T->data);
        InorderTraverse(T->rchild);
    }
    return OK;
}
int PreOrderTraverse2(BiTree T)  //用非递归的算法写的遍历函敎ͼ按照先序遍历Q同时输出结点的?br>{
   BiTree p,s[20];
   int top=0;
   p=T;
   while((p!=NULL)||(top>0))
   {
       while(p!=NULL)
       {
           printf("%d ",p->data);
           s[++top]=p;
           p=p->lchild;
       }
       p=s[top--];
       p=p->rchild;
   }
   return OK;
}

int get_all_node(BiTree T)  //求出ȝl点的个?br>{
   BiTree p,s[20];
   int num_node=0;
   int top=0;
   p=T;
   while((p!=NULL)||(top>0))
   {
       while(p!=NULL)
       {
           num_node++;
           s[++top]=p;
           p=p->lchild;
       }
       p=s[top--];
       p=p->rchild;
   }
   return num_node;
}

int get_node0_1(BiTree T)//利用递归法得到度ؓ0的结点的个数
{
    int num1,num2;
    if(T==NULL)
        return 0;
    else
    {
        if((T->lchild==NULL)&&(T->rchild==NULL))
            return 1;
        else
        {
            num1=get_node0_1(T->lchild);
            num2=get_node0_1(T->rchild);
            return (num1+num2);
        }
    }
}
int get_node0_2(BiTree T) //利用非递归法得到度ؓ0的结?br>{
    int num=0;
    BiTree p=T,s[20];
    int top=0;      //定义一个栈
    while((p!=NULL)||(top>0))
    {
        while(p!=NULL)
        {
            s[++top]=p;
            p=p->lchild;
        }
    
          p=s[--top];
        if(p->rchild==NULL)
        {
            ++num;
        }
        else
            p=p->rchild;
        }
    }
    return num;

}

int get_node1(BiTree T) //利用ȝ关系求出度ؓ1的结点的个数
{
    int num=get_all_node(T)-2*get_node0_1(T)+1;
    return num;
}
int get_node1_1(BiTree T)   //非递归法Q同时利用关pL度ؓ1的结炏V?br>{
    int num=get_all_node(T)-2*get_node0_2(T)+1;
    return num;
}
int get_node2(BiTree T) //利用度ؓ2的结点个C度ؓ0的结点个数的关系得到
{
    int num=get_node0_1(T)-1;
    return num;
}
int get_node2_1(BiTree T)   //非递归法Q同时利用关pL度ؓ2的结炏V?br>{
    int num=get_node0_2(T)-1;
    return num;
}
int get_node(BiTree T)
{
    int get;
   printf("误入你要查扄l点的度\n");
   printf("1.查询度ؓ0的所有结点的个数\n");
   printf("2.查询度ؓ1的所有结点的个数\n");
   printf("3.查询度ؓ2的所有结点的个数\n");
   scanf("%d",&get);
   switch(get){
   case 1:
      printf("度ؓ0的所有结点的个数?d\n",get_node0_1(T));
      break;
   case 2:
       printf("度ؓ1的所有结点的个数?d\n",get_node1(T));
       break;
   case 3:
       printf("度ؓ2的所有结点的个数?d\n",get_node2(T));
       break;
   }
   return OK;
}
int get_node_1(BiTree T)        //利用非递归法的实?br>{
    int get;
    printf("下面是用非递归法来查询\n");
   printf("误入你要查扄l点的度\n");
   printf("1.查询度ؓ0的所有结点的个数\n");
   printf("2.查询度ؓ1的所有结点的个数\n");
   printf("3.查询度ؓ2的所有结点的个数\n");
   scanf("%d",&get);
   switch(get){
   case 1:
      printf("度ؓ0的所有结点的个数?d\n",get_node0_2(T));
      break;
   case 2:
       printf("度ؓ1的所有结点的个数?d\n",get_node1_1(T));
       break;
   case 3:
       printf("度ؓ2的所有结点的个数?d\n",get_node2_1(T));
       break;
   }
   return OK;
}
int LevelOrder(BiTree T)
   Queue *q;
     BiTree p;
     int flag=0;                      //定义flag为层?br>     q=(Queue *)malloc(sizeof(Queue));  //甌循环队列I间
     q->rear=q->front=q->count=0;      //@环队列初始化为空
     q->data[q->rear]=T;
     q->count++;
     q->rear=(q->rear+1)%queuesize;       //根l点入队
     while (q->count)                   //若队列不为空Q做以下操作
         if(q->data[q->front]){            //当队首元素不为空指针Q做以下操作
             p=q->data[q->front];           //取队首元?p
             printf("%d ",p->data);        //打印*pl点的数据域信息
             ++flag;
             q->front=(q->front+1)%queuesize;
             q->count--;       //队首元素出队
             if (q->count==queuesize)//若队列ؓ队满Q则打印队满信息Q退出程序的执行
                 printf("the queue full!\n");
             else{            //若队列不满,?pl点的左孩子指针入队
                 q->count++;q->data[q->rear]=p->lchild;
                 q->rear=(q->rear+1)%queuesize;
                                    //enf of if
             if (q->count==queuesize)        //若队列ؓ队满Q则打印队满信息Q退出程序的执行
                 printf("the queue full!\n");
             else{                      //若队列不满,?pl点的右孩子指针入队
                 q->count++;q->data[q->rear]=p->rchild;
                 q->rear=(q->rear+1)%queuesize;
                                          //end of if
                                        //end of if
         else{                          //当队首元素ؓI指针,空指针出队
             q->front=(q->front+1)%queuesize;
             q->count--;
         }
         printf("\n");
         return OK;
     //end of LevelOrder

int height(BiTree T)
{
    BiTree p=T;
    int a,b;
    if(p==NULL)
        return 0;
    else{
       if((p->lchild==NULL)&&(p->rchild==NULL))
            return 1;
    else{
          a=height(p->rchild);
          b=height(p->lchild);
          if(a>b)   return (a+1);
          else    return (b+1);
          }
    }
}

int judge(BiTree T)   //采用递归法来实现判断是否ؓ完全二叉?br>{
      if(T ==NULL) 
          return   0; 
      if(T->lchild == NULL && T->rchild== NULL) 
          return   1;  
      if(T->lchild  == NULL  && T->rchild != NULL||T->lchild!=NULL &&T->rchild==NULL) 
          return   0; 
      return   judge(T->lchild) & judge(T->rchild); 

}

int exchange(BiTree T)
{
     BiTree p=T;
     int exch;
     if(p==NULL)
         return OK;
     else
     {
         if(p->lchild!=NULL && p->rchild!=NULL)
         {
             exch=p->lchild->data;
             p->lchild->data=p->rchild->data;
             p->rchild->data=exch;
             exchange(p->lchild);
             exchange(p->rchild);
         }
         else
         {
             if(p->lchild==NULL)
                 exchange(p->rchild);
             else
                 exchange(p->lchild);
         }
         return OK;
     }
}

void main()
{
    BiTree T;         //定义一个指向BiTNodel点的指?br>    int choice;
    do{
    printf("\n");
    printf("请选择操作Q\n");
    printf("1.按照先序的次序生成一颗二叉树\n");
    printf("2.递归法实现二叉树的先序遍历Q输出各l点值\n");
    printf("3.用非递归法实现二叉树的遍历Q输出各l点值\n");
    printf("4.求度分别???的结点的数目Q递归法实现Q\n");
    printf("5.求度分别???的结点的数目Q非递归法实现Q\n");
    printf("6.按层ơ遍历二叉树\n");
    printf("7.求二叉树的高?深度)\n");
    printf("8.判断是否为完全二叉树Q输出\"Yes!\"或\"No!\"\n");
    printf("9.交换每个l点的左叛_树\n");
    printf("10.对交换左叛_树后的二叉树作中序遍历\n");
    printf("11.退出\n");
    scanf("%d",&choice);
    switch(choice){
    case 1:
        CreateBiTree(&T);   //创徏二叉?br>        break;
    case 2:
        PreOrderTraverse(T); //利用递归法的先序遍历,输出l点?br>        break;
    case 3:
        PreOrderTraverse2(T);//利用非递归法的先序遍历,输出l点?br>        break;
    case 4:
        get_node(T); //利用递归法得到的各个结点的个数
        break;
    case 5:
        get_node_1(T);  //利用非递归法得到的各个结点的个数
        break;
    case 6:
        LevelOrder(T);
        break;
    case 7:
        printf("二叉树的高度?d\n",height(T));
        break;
    case 8:
        if(judge(T)==0)
            printf("No\n");
        else
            printf("Yes\n");
        break;
    case 9:
         exchange(T);
         break;
    case 10:
         InorderTraverse(T);
         break;
     
    }while(choice!=11);   
}


刘畅 2009-11-27 21:36 发表评论
]]>
U性表的链式存储结?/title><link>http://m.shnenglu.com/deercoder/articles/102107.html</link><dc:creator>刘畅</dc:creator><author>刘畅</author><pubDate>Fri, 27 Nov 2009 13:35:00 GMT</pubDate><guid>http://m.shnenglu.com/deercoder/articles/102107.html</guid><wfw:comment>http://m.shnenglu.com/deercoder/comments/102107.html</wfw:comment><comments>http://m.shnenglu.com/deercoder/articles/102107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/deercoder/comments/commentRss/102107.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/deercoder/services/trackbacks/102107.html</trackback:ping><description><![CDATA[<p style="MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">设某U性表数据元素的类型ؓ整型Q以链表l构存储U性表。试~程实现Q?/span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(1)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">输入数据元素Q以先进先出形式创徏单链?/span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(2)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">销毁单链表</span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(3)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">U性表|空</span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(4)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">求线性表长度</span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(5)</span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">在第<span lang=EN-US XML:LANG="EN-US">i</span>个数据元素前插入新的元素</span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(6)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">删除W?span lang=EN-US XML:LANG="EN-US">i</span>个元?/span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(7)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">昄U性表中的全部元素</span></p> <p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 39pt"><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"><span>(8)</span></span> <span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">求最大元素的值和q_?/span></p> <p><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US XML:LANG="EN-US"> <wbr></span></p> <br>#include<stdio.h><br>#include<conio.h><br>#include<malloc.h><br>#include<stdlib.h><br>#define ERROR <wbr> <wbr> <wbr> <wbr> 0<br>#define OK <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 1<br>#define OVERFLOW <wbr> -2<br>typedef struct LNode{<br> <wbr> <wbr>  <wbr>int data;<br> <wbr> <wbr>  <wbr>struct LNode *next;<br>}LNode,*LinkList;<br><br>int Create_List(LinkList L,int length)<br>{//创徏一个带表头l点的大ؓn个的单链?br> <wbr> <wbr>  <wbr>int i; <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>  <wbr><br> <wbr> <wbr>  <wbr>LinkList p, tail; //声明一定要在前面,否则会出?br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> tail=L;<br> <wbr> <wbr>  <wbr>for(i=0;i<length;i++)<br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> p=(LinkList)malloc(sizeof(LNode));<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>printf("误?d个数据\n",length);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>scanf("%d",&p->data);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>p->next=NULL;<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> tail->next=p;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>tail=tail->next;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return OK;<br>}<br><br>int display_all(LinkList L,int length) //依赖于长度,可是却不定,长度函数有问题?br>{//昄所有的数据元素<br> <wbr> <wbr>  <wbr>int i;<br> <wbr> <wbr>  <wbr>printf("U性表的全部数据元素如下:\n");<br> <wbr> <wbr>  <wbr>for(i=0;i<length-1;i++)<br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>printf("%d ",L->next->data);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>L=L->next;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr>  <wbr>printf("\n");<br> <wbr> <wbr>  <wbr>return OK;<br>}<br><br>int length_L(LinkList L) //有问?br>{//求得U性表的长?br> <wbr> <wbr>  <wbr>int length=0;<br> <wbr> <wbr>  <wbr>LinkList p=L;<br> <wbr> <wbr>  <wbr>while(p!=NULL)<br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>++length;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>p=p->next;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr>  <wbr>return length;<br>}<br><br>int ListInsert(LinkList L,int i ,int *e)<br>{//插入元素<br> <wbr> <wbr>  <wbr>LinkList p=L,s;<br> <wbr> <wbr>  <wbr>int j=0;<br> <wbr> <wbr>  <wbr>while(p&&j<i-1)<br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>p=p->next;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>++j;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr> <wbr> <wbr> if(!p||j>i-1) return ERROR;<br> <wbr> <wbr>  <wbr> s=(LinkList)malloc(sizeof(LNode));<br> <wbr> <wbr>  <wbr> s->data=*e;<br> <wbr> <wbr>  <wbr> s->next=p->next;<br> <wbr> <wbr> <wbr> <wbr> p->next=s;<br> <wbr> <wbr>  <wbr> return OK;<br>}<br>int ListDelet(LinkList L, int i)<br>{//删除指定位置的结?br> <wbr> <wbr>  <wbr>LinkList p=L,q;<br> <wbr> <wbr>  <wbr>int j=0;<br> <wbr> <wbr>  <wbr>while(p->next&&j<i-1) <wbr> //LWi-1个结?br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>p=p->next;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>++j;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr> <wbr> if(!(p->next)||j>i-1) return ERROR;<br> <wbr> <wbr> <wbr> q=p->next; p->next=q->next;<br> <wbr> <wbr> <wbr> free(q);<br> <wbr> <wbr>  <wbr>return OK;<br>}<br>int Destroy_L(LinkList L) <wbr> <wbr> //q里会遇C个问题,如果头l点free掉的话就会出错,<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> //因ؓ头结点不是自己分配的Q而是pȝ分配的,在主函数中,所以无法释?br>{<br> <wbr> <wbr> <wbr> <wbr> LinkList head=L,p;<br> <wbr> <wbr>  <wbr> p=head;<br> <wbr> <wbr>  <wbr> if (head)<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> p = head->next ;<br> <wbr> <wbr>  <wbr> head = head->next ;<br> <wbr> <wbr>  <wbr> while(head!=NULL)<br> <wbr> <wbr>  <wbr> {<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> p=head;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> head=head->next;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> free(p);<br> <wbr> <wbr>  <wbr> }<br> <wbr> <wbr>  <wbr> return OK;<br>}<br>int ClearList(LinkList L)<br>{//U性表|空<br> <wbr> <wbr>  <wbr>L->next=NULL; <wbr> //头l点指针域置为NULL<br> <wbr> <wbr>  <wbr>return OK;<br>}<br>int max_num(LinkList L)<br>{<br> <wbr> <wbr>  <wbr>LinkList p=L->next;<br> <wbr> <wbr>  <wbr>int max=0;<br> <wbr> <wbr>  <wbr>while(p!=NULL)<br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>if(max<=p->data)<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>max=p->data;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>p=p->next;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr>  <wbr>return max;<br>}<br><br>float aver_num(LinkList L) <wbr> //注意函数名不要和变量同名Q很Ҏ出错<br>{ //求出所有元素的q_?br> <wbr> <wbr> <wbr> LinkList p=L->next;<br> <wbr> <wbr>  <wbr>float average;<br> <wbr> <wbr>  <wbr>int sum=0;<br> <wbr> <wbr>  <wbr>int length=length_L(L);<br> <wbr> <wbr>  <wbr>while(p!=NULL)<br> <wbr> <wbr>  <wbr>{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>sum+=p->data;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>p=p->next;<br> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr>  <wbr>average=(float)sum/(length-1);<br> <wbr> <wbr>  <wbr>return average;<br>}<br><br>void main()<br>{<br> <wbr> <wbr>  <wbr>int i,get,length,e;<br> <wbr> <wbr>  <wbr>LNode L; <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> //创徏头结点L<br> <wbr> <wbr>  <wbr>L.next=NULL;<br> <wbr> <wbr>  <wbr>do{<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>printf("\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>printf("1.输入数据元素Q以先进先出形式创徏单链表\n");<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> printf("2.销毁单链表\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> printf("3.U性表|空\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> printf("4.求线性表长度\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> printf("5.在第i个数据元素前插入新的元素\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> printf("6. 删除Wi个元素\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> printf("7.昄U性表中的全部元素\n");<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> printf("8.求最大元素的值和q_值\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>printf("9.退出\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> printf("误入你选择的操作序号\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> scanf("%d",&get);<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> switch(get){<br> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> case 1:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> printf("误入数据元素的个数\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> scanf("%d",&length);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> Create_List(&L,length);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> break;<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> case 2:<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> Destroy_L(&L);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 3:<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> ClearList(&L);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 4:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> length=length_L(&L);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> printf("q个U性链表的长度(含头l点)?d\n",length);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 5:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> printf("请分别输入你要插入数据的元素的位|?Wi个元素之?和?整型)\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> scanf("%d,%d",&i,&e);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> ListInsert(&L,i,&e);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 6:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> printf("请分别输入你要删除数据的元素的位|?Wi个元?\n");<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> scanf("%d",&i);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> ListDelet(&L,i);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 7:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr> length=length_L(&L);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> display_all(&L,length);<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 8:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr> printf("U性表中的最大元素是%d\n",max_num(&L));<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> printf("U性表中所有元素的q_?f\n",aver_num(&L));<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr> <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> case 9:<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr> break;<br> <wbr> <wbr>  <wbr> <wbr> <wbr>  <wbr>}<br> <wbr> <wbr>  <wbr>}while(get!=9);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>  <wbr><br>}<br> <img src ="http://m.shnenglu.com/deercoder/aggbug/102107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/deercoder/" target="_blank">刘畅</a> 2009-11-27 21:35 <a href="http://m.shnenglu.com/deercoder/articles/102107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>序表的操作http://m.shnenglu.com/deercoder/articles/102108.html刘畅刘畅Fri, 27 Nov 2009 13:35:00 GMThttp://m.shnenglu.com/deercoder/articles/102108.htmlhttp://m.shnenglu.com/deercoder/comments/102108.htmlhttp://m.shnenglu.com/deercoder/articles/102108.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102108.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102108.html1Q?/span>设某U性表数据元素的类型ؓ整型Q以序l构存储U性表。试~程实现Q?/span>

(1) U性表|空

(2) 求线性表长度

(3) 数据元素的插入操?/span>

(4) 数据元素的删除操?/span>

(5) 昄U性表中的全部元素


#include<stdio.h>
#include<malloc.h>
#include <conio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10
#define ERROR     0
#define OK        1
#define OVERFLOW  -2

typedef struct{
   int *elem;
   int length;
   int listsize;
   }SqList;

int InitList_Sq(SqList *L) //括号中传递参数是是它的指针L,q样才能对它指向的元素改变?br>{
  int i;
  L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
  if(!L->elem)  exit(OVERFLOW);
  L->length =10;
  L->listsize = LIST_INIT_SIZE; //分配初始的空?br>  for(i=0;i<L->length;i++)
  {
      L->elem[i]=i;
  }
  return OK;
}//InitList_Sq

int get_length(SqList *L)
{
    return L->length;
}

int destroy(SqList *L)
{
    L->length=0;
    return OK;
}

int ListInsert_Sq(SqList *L,int i, int e)
{ //在顺序表L中的Wi个位|之前插入新的元素eQ?br>    //i的合法gؓ1<=i<=ListLength_Sq(L)+1;
    int *newbase,*q,*p;
    if(i<1||i>L->length+1) return ERROR;
    if(L->length>=L->listsize){// 当前的存储空间已满,增加分配
         newbase = ( int *)realloc(L->elem,( L->listsize +LISTINCREMENT)*sizeof(int));
         if(!newbase) exit(OVERFLOW) ; //存储I间分配p|
         L->elem = newbase;
         L->listsize+=LISTINCREMENT;    
   }
   q=&(L->elem[i-1]);
   for(p=&(L->elem[L->length-1]);p>=q;--p)  *(p+1)=*p;
                                       //插入位置及之后的元素右移            
   *q=e;
   ++L->length;
   return OK;
}//ListInsert_Sq;

int ListDelete_Sq(SqList *L, int i, int e) {  
  // 在顺序线性表L中删除第i个元素,q用eq回其倹{?br>  // i的合法gؓ1≤i≤ListLength_Sq(L)?br>  int *p, *q;
  if (i<1 || i>L->length) return ERROR;  // ig合法
  p = &(L->elem[i-1]);                   // p删除元素的位|?br>  e = *p;                               // 被删除元素的Dle
  q = L->elem+L->length-1;                // 表尾元素的位|?br>  for (++p; p<=q; ++p) *(p-1) = *p;     // 被删除元素之后的元素左移
  --L->length;                           // 表长?
  return OK;
} // ListDelete_Sq

int display_all(SqList *L)
{
    int i;
    for(i=0;i<L->length;i++)
    {
        printf("%d",L->elem[i]);
        printf(" ");
    }
    return OK;
}
int main()
{
    SqList L;
    int get,e=0;
    int i,num;
    InitList_Sq(&L);
    do{
    printf("误入你要进行的操作序号\n");
    printf("1.U性表|空\n");
    printf("2.求线性表长度\n");
    printf("3.数据元素的插入操作\n");
    printf("4.数据元素的删除操作\n");
    printf("5.昄U性表中的全部元素\n");
    printf("6.退出\n");
    scanf("%d",&get);
    switch(get)
    {
    case 1:
          destroy(&L);//顺序表|空Q只需要将光度置?br>          break;
    case 2:
          printf("该线性表的长度是%d\n",get_length(&L)); //求取U性表的长?br>          break;
    case 3:
          //在指定的位置上插入指定的数据元素
          printf("误入你要插入的元素的位|(卛_Wi个元素之前插入)以及插入元素\n");
          scanf("%d,%d",&i,&num);
          ListInsert_Sq(&L,i,num);
          printf("新的U性表是\n");
          display_all(&L);
          break;
    case 4:
        //删除指定位置的数据元?br>          printf("误入你要删除的元素的位|(卛_除第i个元素)\n");
          scanf("%d",&i);
          ListDelete_Sq(&L,i,e);
          printf("新的U性表是\n");
          display_all(&L);
          break;
    case 5:
        //昄U性表的所有元?br>          display_all(&L);
          printf("\n");
          break;
    case 6:
        //退出程?br>          break;
    }
    }while(get!=6);
    return OK;
}


刘畅 2009-11-27 21:35 发表评论
]]>
插入排序的思想http://m.shnenglu.com/deercoder/articles/102106.html刘畅刘畅Fri, 27 Nov 2009 13:30:00 GMThttp://m.shnenglu.com/deercoder/articles/102106.htmlhttp://m.shnenglu.com/deercoder/comments/102106.htmlhttp://m.shnenglu.com/deercoder/articles/102106.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102106.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102106.html1. 现在有两U方法,一U是法D中的Q一U是数据l构的,但是M思想都是一致的?br>2.对于每一个iQ从1开始,即第二个元素Q具体是多少不确定)Q如果a[i]比a[i-1],是比前面的那个,则进行相应的操作Q否则不变,递增下去?br>3.每次都将a[i]赋值给keyQ关键字keyQ实际上每次都进行比较,先赋值给keyQ实际上是保留q个敎ͼ然后前面的一个数Ud到后面,q个是首先的操作?br>4.下面是对于具体的每一个key来定位,每次都要UdQ?#8230;………………………
注意最后要赋g厅R?br>

……………………_之处在于赋值和保存a[i]


刘畅 2009-11-27 21:30 发表评论
]]>
插入排序http://m.shnenglu.com/deercoder/articles/102105.html刘畅刘畅Fri, 27 Nov 2009 13:29:00 GMThttp://m.shnenglu.com/deercoder/articles/102105.htmlhttp://m.shnenglu.com/deercoder/comments/102105.htmlhttp://m.shnenglu.com/deercoder/articles/102105.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102105.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102105.html
int Insert_sort(int *p,int length)
{
    int i,j,key;
    for(i=1;i<=(length-1);i++)
    {
       if(*(p+i)<*(p+i-1))
       {
           key=*(p+i);
           *(p+i)=*(p+i-1);
           for(j=i-1;j>=0 &&key<*(p+j);--j)
           {
               *(p+j)=*(p+j-1);
           }
           *(p+j+1)=key;
       }
    }

    return 0;
}

int main()
{
    int a[10]={0,4,1,9,5,7,2,3,6,8};
    int i;
    int *p=&a[0];
    Insert_sort(p,10);
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
}


通过指针调用的Ş式来改变原来数组中的|q样可以了。而每一个数l元素都可以用指针加位移量来定

#include<stdio.h>
void main()
{
    
int i,j;
    
//a[0]为哨兵,所以它的值随便,但是注意要排序的是后面的几个Q而且长度也是后面的几个?/span>
    int a[11]={0,1,2,4,9,0,3,8,6,7,5};
    
//插入排序
    for(i=2;i<=10;++i)
    
{
       
if(a[i]<a[i-1])
       
{
           a[
0]=a[i];        //已经保存了a[i],所以下面就不必担心被冲掉?/span>
           a[i]=a[i-1];
           
for(j=i-2;a[0]<a[j];--j)
           
{
               a[j
+1]=a[j];
           }

           a[j
+1]=a[0];
       }


    }

    
for(i=1;i<11;i++)              //从a[1]开始输出,q样才消除了哨兵?/span>
    {
        printf(
"%d ",a[i]);
    }

}



注意真正的排序部分是从a[
1]开始的Q还有长度length不是数组的长度,而是实际要排序的长度Q这里把a[i]冲掉的步骤很好,而且没有影响Q因为已l保存下来了?br>
--------------------《数据结?nbsp;        严蔚敏版?br>


 1#include<stdio.h>
 2void main()
 3{
 4    int a[10]={0,4,1,9,5,7,2,3,6,8};
 5    int key,i,j;
 6    for(i=1;i<=9;i++)
 7    {
 8        if(a[i]<a[i-1])
 9        {
10            key=a[i];
11            a[i]=a[i-1];
12            for(j=i-1;j>=0 && key<a[j];--j)
13            {
14                a[j]=a[j-1];
15            }

16           a[j+1]=key;
17        }

18    }

19         for(i=0;i<10;i++)
20         {
21             printf("%d ",a[i]);
22         }

23}

24


刘畅 2009-11-27 21:29 发表评论
]]>
数据l构-----单的插入http://m.shnenglu.com/deercoder/articles/102104.html刘畅刘畅Fri, 27 Nov 2009 13:28:00 GMThttp://m.shnenglu.com/deercoder/articles/102104.htmlhttp://m.shnenglu.com/deercoder/comments/102104.htmlhttp://m.shnenglu.com/deercoder/articles/102104.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102104.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102104.html//两个表无序也可,只是插入可以?br>#include<stdio.h>
int compare(int e,int *a,int length)
{
    int i;
    for(i=0;i<length;i++)
    {
        if(e==*(a+i))
            return 1;
        else
            continue;
    }
    return 0;
}
int main()
{
    int i,j;
    int length_a=10; //定义a的实际长度,剩余I间用来填充?br>    int a[20]={0,1,2,3,4,5,6,7,8,9};
    int b[10]={2,4,11,23,34,21,12,8,9,10};
    for(i=0,j=0;i<10;i++)
    {
        if(!compare(b[i],a,10))
        {
            a[10+j]=b[i];
            j++;
        }
          
        else
            continue;
    }
    for(i=0;i<j+length_a;i++)
    {
       printf("%d ",a[i]);
    }
    printf("\n");
   return 0;
}


刘畅 2009-11-27 21:28 发表评论
]]>
实现一个简单的q制转换http://m.shnenglu.com/deercoder/articles/102103.html刘畅刘畅Fri, 27 Nov 2009 13:27:00 GMThttp://m.shnenglu.com/deercoder/articles/102103.htmlhttp://m.shnenglu.com/deercoder/comments/102103.htmlhttp://m.shnenglu.com/deercoder/articles/102103.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/102103.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/102103.html//只是利用了堆栈的性质Q实际上Ҏ不是
//利用堆栈的性质实现一个十q制转换成相应的q制表示?br>#include<stdio.h>
int convert(int a,int N,int *num)
{
    int count=0;
    while(a!=0)
    {
        *(num+count)=a%N;
        a=a/N;
        count++;        
    }
    return count;
}
int main()
{
    int num[10],i,N;
    int a,count,get;
    int *p=&count;
    printf("误入你要{换的十进制数\n");
    scanf("%d",&a);
    printf("误入你要选择的进制\n");
    printf("1.二进制\n");
    printf("2.八进制\n");
    scanf("%d",&N);
    get=a;
    if(N==1)
        count=convert(a,2,num);   //输入的N和你要{换的q制不是同一个?br>    if(N==2)
        count=convert(a,8,num);
    printf("%d?dq制表示是\n",get,N);
    for(i=count-1 ; i>=0 ; i--)  //开始的时候傻×Q用的是i<0,肯定都不满啊,所以完全没有输出?br>    {
        printf("%d",*(num+i));
    }
    printf("\n");
}

注意16q制׃可用Q原因是过10的数p用字母表C,会出错的?br>

刘畅 2009-11-27 21:27 发表评论
]]>
二叉排序树的各种操作实现http://m.shnenglu.com/deercoder/articles/100965.html刘畅刘畅Sun, 15 Nov 2009 03:54:00 GMThttp://m.shnenglu.com/deercoder/articles/100965.htmlhttp://m.shnenglu.com/deercoder/comments/100965.htmlhttp://m.shnenglu.com/deercoder/articles/100965.html#Feedback0http://m.shnenglu.com/deercoder/comments/commentRss/100965.htmlhttp://m.shnenglu.com/deercoder/services/trackbacks/100965.html#include <iostream>
#include <iomanip>
using namespace std;

typedef struct BinaryTree
{
 int data;
 struct BinaryTree *l;
 struct BinaryTree *r;
}*BiTree,BiNode;
 
class BiSearchT
{
private:
 BiTree root;
public:
 BiSearchT() :root(NULL) {}
 int PreOrderTraverse(BiTree t,int (*Visit)(int e));
 int InOrderTraverse(BiTree t,int (*Visit)(int e));
 int InsertBST(BiTree *t,int e);
 void Delete(BiTree *p);
 bool DeleteBST(BiTree *t,int key);
 bool SearchBST(BiTree t,int key,BiTree f,BiTree *p);
};
//先序遍历二叉树T
int BiSearchT::PreOrderTraverse(BiTree t,int (*Visit)(int d))
{
 if(t)
 {
  if(Visit(t->data))
   if(PreOrderTraverse(t->l,Visit))
    if(PreOrderTraverse(t->r,Visit)) return 1;
    return 0;
    }else return 1;
}
//中序遍历二叉树T
int BiSearchT::InOrderTraverse(BiTree t,int (*Visit)(int d))
{
 if(t)
 {
  if(InOrderTraverse(t->l,Visit))
   if(Visit(t->data))
    if(InOrderTraverse(t->r,Visit)) return 1;
    return 0;
    }else return 1;
}
//二叉排序树上的查N归法
bool BiSearchT::SearchBST(BiTree t,int key,BiTree f,BiTree *p)
{
 if(!t)
  {*p=f;return false;}
  else if(key==t->data) {*p=t;return true;}
  else if(key<t->data) SearchBST(t->l,key,t,p);
  else SearchBST(t->r,key,t,p);
}
//插入法
int BiSearchT::InsertBST(BiTree *t,int e)
{
 BiTree p;
 BiTree s;
 if(!SearchBST(*t,e,NULL,&p))
 {
  s=(BiTree)malloc(sizeof(BiNode));
  s->data=e;s->l=s->r=NULL;
  if(!p) *t=s;
  else if(e<p->data) p->l=s;
  else p->r=s;
  return true;
 }
 else return false;
}
//在二叉树中删除一个结?br>void BiSearchT::Delete(BiTree *p)
{
 BiTree q,s;
 if(!(*p)->r)
 {
  q=(*p);
  (*p)=(*p)->l;
  free(q);
 }
 else if(!(*p)->l)
 {
  q=(*p);
  (*p)=(*p)->r;
  free(q);
 }
 else
 {
  q=s=(*p)->l;
  while(s->r) s=s->r;
  s->r=(*p)->r;
  free(*p);
  (*p)=q;
 }
}
//二叉排序树的删除
bool BiSearchT::DeleteBST(BiTree *t,int key)
{
 if(*t!=NULL)
 {
  if(key==(*t)->data) Delete(t);
  else
   if(key<(*t)->data) DeleteBST(&((*t)->l),key);
   else DeleteBST(&((*t)->r),key);
   return true;
 }
   else return false;
}
//输出二叉排序树的数据地域?br>int printelem(int d)
{
 cout<<setw(4)<<d;
 return 1;
}

void main()
{
 BiTree sroot=NULL;
 BiTree Croot=NULL;
 int q,c,d,e,f,g,h,l,m,x;
 cout<<"..............................二叉排序树的基本操作.............................."<<endl;
 cout<<"h输入十个正整CZ叉排序树的十个结?"<<endl;
 cin>>q>>c>>d>>e>>f>>g>>h>>l>>m>>x;
 int i,j,k,a[10]={q,c,d,e,f,g,h,l,m,x};
 int n=7,b[]={10,7,6,9,20,12,22};
 BiSearchT my;
 for(i=0;i<10;i++)
  my.InsertBST(&sroot,a[i]);
 cout<<"二叉排序树创建成?"<<endl;
    cout<<"先序遍历二叉排序?"<<endl;
 my.PreOrderTraverse(sroot,printelem);
 cout<<endl;
 cout<<"中序遍历二叉排序?"<<endl;
 my.InOrderTraverse(sroot,printelem);
 cout<<endl;
    cout<<"误入你要查扄元素:";
 cin>>i;
 if(i==q||i==c||i==d||i==e||i==f||i==g||i==h||i==l||i==m||i==x)
  cout<<"查找成功!"<<endl;
 else cout<<"查找p|!"<<endl;
 cout<<"误入你要删除的元素(...输入的元素必d二叉排序树中...):";
 cin>>j;
 my.DeleteBST(&sroot,j);
 cout<<"先序遍历二叉排序?"<<endl;
 my.PreOrderTraverse(sroot,printelem);
 cout<<endl;
 cout<<"中序遍历二叉排序?"<<endl;
    my.InOrderTraverse(sroot,printelem);
 cout<<endl;
    cout<<"在此基础上请输入你要插入的元?";
 cin>>k;
 my.InsertBST(&sroot,k);
    cout<<"先序遍历二叉排序?"<<endl;
 my.PreOrderTraverse(sroot,printelem);
 cout<<endl;
 cout<<"中序遍历二叉排序?"<<endl;
    my.InOrderTraverse(sroot,printelem);
 cout<<endl;
}



刘畅 2009-11-15 11:54 发表评论
]]>
ݺݸɺݺݾþ| Ʒ˾Ʒþþ| þúݺɫۺ| 91Ʒþþþþ| þþƷ| þþƷоƷ| ŷպĻþþò | ҹAVëƬþ| þֻ⾫Ʒ99| ղƷþþһ| þþƷŷƬ| պƷþþվ| þþƷƷ| þþƷѿ޹AV| þɬۺ| þۺ϶㼤þ| Ʒþ¶| ɫɫݺɫۺϾþ| Ʒþþþþþþ| ŷ츾XXXXԾþþ| þþþùպƷվ| AëƬþþƷ| þþþӰԺ| պƷþþþþþõӰ| þ۲ӰԺѿҹɫ| þùƷþ| Ʒ99Ʒþ| þ°Ҳȥ| þþþƷþþþþ | ҹӰԺþþƷѿһ | þҹҹݺ| þþƷav٤| 99ȳ˾ƷȾþ669| ɫAVԾþþþþ| ھƷþþþþþþõӰ| ƷþþĻ| þþþĻƷ| þҹӰ| ˺ݺۺϾþ88| þù޾Ʒ鶹| aëƬþѲ|