zoukankan      html  css  js  c++  java
  • 线性表的顺序存储和链式存储的实现(C)

    //线性表的顺序存储

    #include <stdio.h>
    typedef int DataType;
    #define MaxSize 15
    //定义顺序表
    typedef struct 
    {
     DataType List [MaxSize];
     int Size;
    }Slist;
    //初始化顺序表
    void ListInit(Slist * S)
    {
    S->Size=0;

    }
    //插入数据
    int ListInsert(Slist *S ,int i,DataType x)
    {        int j;
          if(i<0||i>S->Size)
          {
          printf("插入位置不正确!");
          return 0;
          }
          else
          {
              for(j=S->Size;j>i;j--)
              {
                  S->List[j]=S->List[j-1];
              }
              S->List[i]=x;
              S->Size++;
              return 1;
          }
    }
    //取得元素个数
    int ListLength(Slist *S)
    {
        return S->Size;
    }

    //删除元素
    int ListDelete(Slist *S,int i,DataType *x)
    {        int j;
        if(i<0||i>S->Size-1)
        {
          printf("删除位置不正确!");
          return 0;
        }
        else
        {     //保存删除的数据到x所指的变量中;
            *x=S->List[i];
            for(j=i;j<S->Size-1;j++)
            {
                S->List[j]=S->List[j+1]     ;
            
            }
                S->Size--;
                return 1;
        }
    }
    //取得顺序表中的元素
    int ListGet(Slist *S,int i,DataType *x)
    {    
        if(i<0||i>S->Size-1)
        {
          printf("没有这个元素!");
        }
        else
        {
            *x=S->List[i];
            return 0;
        }

    }

    //主函数

    int main ()
    {
        //定义一个结构体变量
        Slist     mylist;
        int x,b,i;
        //初始化
        ListInit(&mylist);
        //插入数据
        for(i=0;i<10;i++)
        ListInsert(&mylist,i,i+6);
        //取得数据元素个数
         b=ListLength(&mylist);
          printf("顺序表中的元素个数为:");
         printf("%d ",b);
        //取得插入的数据
         for(i=0;i<ListLength(&mylist);i++)
         {
        ListGet(&mylist,0,&x);
        printf("%d ",x);
         }
        return 0;
    }
         
         




      
    //线性表的链式存储
    #include<stdio.h>
    #include<malloc.h>
    //定义链式表的结构体
    typedef int DataType ;

    typedef struct snode
         {      DataType data;
            struct snode *next;
         } Lnode;
    //进行初始化
    void ListInit(Lnode **head)
    {
      *head=(Lnode*)malloc(sizeof(Lnode));       //头指针
      (*head)->next=NULL;
    }

    //插入数据
    int ListInsert(Lnode *head,int i,DataType x)
    {
        int j;
      Lnode *p,*q;
      p=head;
      j=-1;
      while(p->next!=NULL&&j<i-1)
      {
          p=p->next;
          j++;
      }
          if(j!=i-1)
          {
            printf("插入的位置不对,请重新插入");
            return 0;
          }
          q=(Lnode*)malloc(sizeof(Lnode));      //申请一个节点
          q->data=x;
          q->next=p->next;
          p->next=q;
          return 1;
      }

    //取得元素个数
      int ListLength(Lnode *head)
      {
        Lnode *p;
        int size=0;
        p=head;

        while(p->next!=NULL)
        {
        p=p->next;
             size++;
        }
        return size;
      }

      //删除数据
      int ListDelete(Lnode *head,int i,DataType *x)
      {
         Lnode *p,*q;
         int j;
         p=head;
         j=-1;
         while(p->next!=NULL&&j<i)
         {
             p=p->next;
             j++;
         }
         if(j!=i-1)
         {
              printf("删除的位置不对!");
             return 0;
         }
         q=p->next;
         *x=p->data;
         p->next=p->next->next;
         free(q);
         return 1;
      }

      //取得元素
      int ListGet(Lnode* head,int i,DataType *x)
      {
        Lnode *p;
        int j;
        p=head;
        j=-1;
        while(p->next!=NULL&&j<i)
        {
          p=p->next;
          j++;
        }
        if(j!=i)
        {
            printf("取元素位置参数有误!");
            return 0;
        }
        *x=p->data;
        return 1;
      }
     
      //销毁数据链
     void ListDestroy(Lnode **head)
     {
          Lnode *p,*q;
         p=*head;
         while(p!=NULL)
         {        q=p;
         p=p->next;
         free  (q);
        }
         *head=NULL;
     }

      //主函数
    void main ()
         {
             Lnode *mylist;
             int i,x,s;
         //初始化链表
             ListInit(&mylist);
             //插入数据
             for(i=0;i<10;i++)
             ListInsert(mylist,i,i+1);
             //取得数据个数
            s= ListLength(mylist);
            printf("元素个数为:%d ",s);
            //取得所有数据
            for(i=0;i<ListLength(mylist);i++)
            {
            ListGet(mylist,i,&x) ;
            printf("%d ",x);
            }
         }

  • 相关阅读:
    2013 新春快乐
    石头剪刀布游戏
    【MTK】MTK 报错集锦
    爱上双节棍男生的十五个理由
    Jni下NDK开发的bug问题汇总
    NDK中c语言logcat环境的搭建
    Android中Alertdialog对话框点击消失?
    Android上关于cmwap/cmnet网络切换的疑惑?
    Jni调用方法产生java.lang.UnsatisfiedLinkError错误
    android.os.NetworkOnMainThreadException问题
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/6037478.html
Copyright © 2011-2022 走看看