數據結構C---單鏈表的創建及遍歷


# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
typedef struct Node{
  int data;
  struct Node *pnext;
}Node,*PNODE;
PNODE creatList(void);
void travelList(PNODE pHead);
int main(){
    PNODE pHead=NULL;
    pHead=creatList();
    travelList(pHead);
return 0;
}
//創建鏈表,需要內存空間

 PNODE creatList(void){ 
//生成一個頭結點,phead指向頭結點
    int len;
    int i;
    int val;
    PNODE pHead=(PNODE)malloc(sizeof(Node));
    if(NULL==pHead){
        printf("分配內存失敗");
        exit(-1);
                }
    PNODE ptail=pHead;
    ptail->pnext=NULL;
    printf("input the numbers:len=");
    scanf("%d",&len);
    for(i=0;i<len;i++)
    {   printf("輸入第%d元素",i+1);
        scanf("%d",&val);   //\n
        PNODE pnew=(PNODE)malloc(sizeof(Node));
        if(NULL==pnew){
        printf("分配內存失敗");
        exit(-1);
                }
        pnew->data=val;
        ptail->pnext=pnew;
        pnew->pnext=NULL;
        ptail=pnew;                
        }
        return pHead;
    
}
void travelList(PNODE pHead){
    PNODE p;
    p=pHead->pnext;
    while(NULL!=p)
    {   printf("%d",p->data);
        p=p->pnext;
    }
    printf("\n");
    return ;            
}

主要原因--注意在scanf("%d\n"),不用加\n。因為本身我們通過鍵盤敲如都會加回車

函數參數個數變化

/*
遍歷僅需要頭指針
尋找單鏈表中的第i個節點;並在第i個節點后面插入節點s
*/
# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
typedef struct Node{
  int data;
  struct Node *pnext;
}Node,*LinkList;
typedef int Status;
void creatList(LinkList L,int n);
void travelList(LinkList L);

int main(){
    LinkList L=(LinkList)malloc(sizeof(Node));
    int len;
    printf("input the length of Link,len=");
    scanf("%d",&len);
    creatList(L,len);
    travelList(L);
return 0;
}
//創建鏈表,需要內存空間
  void creatList(LinkList L,int n)
{LinkList p,r;
    int i;
    int val;
    r=L;
    for(i=0;i<n;i++)
    {   printf("輸入的是第%d個元素",i+1);
        scanf("%d",&val);
        p=(Node*)malloc(sizeof(Node));
        p->data=val;
        r->pnext=p;
        r=p;
    } 
    r->pnext=NULL;
}

void travelList(LinkList L){
    LinkList p=L->pnext;
    while(NULL!=p)
    {   printf("%d",p->data);
        p=p->pnext;
        }
        printf("\n");
            
}

方式二、利用LinkList中的*L作為參數,在創建鏈表函數中

/*
遍歷僅需要頭指針
尋找單鏈表中的第i個節點;並在第i個節點后面插入節點s
*/
# include<stdio.h>
# include<malloc.h>
# include<stdlib.h>
typedef struct Node{
  int data;
  struct Node *pnext;
}Node,*LinkList;
typedef int Status;
void creatList(LinkList *L,int n);
void travelList(LinkList L);

int main(){
    LinkList L=(LinkList)malloc(sizeof(Node));
    int len;
    printf("input the length of Link,len=");
    scanf("%d",&len);
    creatList(&L,len);
    travelList(L);
return 0;
}
//創建鏈表,需要內存空間
  void creatList(LinkList *L,int n)
{LinkList p,r;
    int i;
    int val;
    *L=(LinkList)malloc(sizeof(Node));
    r=*L;
    for(i=0;i<n;i++)
    {   printf("輸入的是第%d個元素",i+1);
        scanf("%d",&val);
        p=(Node*)malloc(sizeof(Node));
        p->data=val;
        r->pnext=p;
        r=p;
    } 
    r->pnext=NULL;
}

void travelList(LinkList L){
    LinkList p=L->pnext;
    while(NULL!=p)
    {   printf("%d",p->data);
        p=p->pnext;
        }
        printf("\n");
            
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM