线性表的顺序存储和链式存储的实现(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);
        }
     }

原文地址:https://www.cnblogs.com/wanghuaijun/p/6037478.html