双向链表 头插法 尾插法

#include"ll.h"
#define CHECK(p)  if(NULL==p) return NULL
#define  ERR   -1
#define  succes 0
int *jjd1();int *jjd();
int foreach (lin *pheader);
typedef struct lin{
    int num;
    struct lin *pri;
    struct lin *pnext;

}lin;//结构体
int main(void)
{   lin *pheader=NULL;
   // pheader=jjd1();//尾插法
    pheader=jjd();//头插法
    foreach (pheader);//遍历
    return 0;
}
int *jjd1(){
    lin *pheader=( lin *)malloc(sizeof( lin));
    CHECK(pheader);
    pheader->pri=NULL;pheader->pnext=NULL;
    int val=0;
    lin *pt= pheader;
    while(1){
        printf("shuru");
        scanf("%d",&val);
        if(ERR==val){break;}
        lin *pnode=( lin *)malloc(sizeof( lin));
        pnode->pri=NULL;pnode->pnext=NULL;
        pnode->num=val;
        pnode->pri=pt;
        pt->pnext=pnode;
        pt=pnode;
        }return pheader;//尾插法
}
int *jjd(){
    lin *pheader=( lin *)malloc(sizeof( lin));
    CHECK(pheader);
    pheader->pri=NULL;pheader->pnext=NULL;
    int val=0;
    lin *pm = (lin *)malloc(sizeof(lin));
    memset(pm, 0, sizeof(lin));
    pm->pri = NULL;
    pm->pnext = NULL;
     printf("shuru");
    scanf("%d",&val);
    pm->num=val;
    pheader->pnext=pm;
    pm->pri=pheader;
    //printf("%d",pm->num);
      while(1){
        printf("shuru");
        scanf("%d",&val);
        if(ERR==val){break;}
             lin * pt = (lin *)malloc(sizeof(lin));
                pt->pri = NULL;
                pt->pnext = NULL;
                pt->num=val;
                pheader->pnext=pt;
                pm->pri = pt;
                pt->pnext =pm;
                pt->pri =pheader;/*printf("%d",pt->num);*/
                pm=pt;
  }return pheader;
}//头插法
int foreach (lin *pheader){
    CHECK(pheader);
    lin *pc=pheader->pnext;
    while(pc!=NULL){
    printf("%d\n",pc->num);
    pc=pc->pnext;}
    return succes;
}

猜你喜欢

转载自blog.csdn.net/weixin_44833201/article/details/89467712