C語言-動態連結串列的建立遍歷與插入
阿新 • • 發佈:2019-02-08
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define P printf
typedef struct num
{
int id;
struct num *next;
}num;
num* creat()
{
int id=0;
num *head=NULL;
num *pnow=NULL;
num *pnew=NULL;
head=(num *)malloc(sizeof(num));
head->id=-1;
pnow=head;
P("請輸入一個ID\n");
while(1)
{
scanf("%d",&id);
if(id==-1){break;}
pnew=(num *)malloc(sizeof(num)); //開闢一段新的記憶體空間
pnow->next=pnew; //將現在的next指向 新開闢的空間
//設定新記憶體的ID 與預設next空指向
pnew->id=id;
pnew->next=NULL;
pnow=pnew;//新開闢的記憶體空間 指向現在
}
P("head=%p\n",head);
return head;
}
int pnum(num *head)
{
num *p=head->next;
P("head=%p p=%p\n",head,p);
if(head==NULL){return -1;}
while(p!=NULL)
{
P("%p:%d->\n ",p,p->id);
p=p->next;
}
return 0;
}
int insert(num *head)
{
num *p_now=head->next;
num *p_last=head;
num *p_insert=NULL;
if(head==NULL){return -1;}
while(p_now!=NULL)
{
if(p_now->id==5)
{//找到ID=5的連結串列就 退出迴圈() 此時的p_now為ID==5的指標
p_insert=(num *)malloc(sizeof(num));
p_last->next=p_insert;
p_insert->id=4;
p_insert->next=p_now;
break;
}
p_last=p_now; //儲存以前的指標-last
p_now=p_now->next; //改變指標指向下一條
}
//p_now指向最後一個NULL(代表未找到匹配ID 新增到最後一個連結串列)
if(p_now==NULL)
{
p_now=(num *)malloc(sizeof(num));
p_last->next=p_now;
p_now->id=4;
p_now->next=NULL;
p_now=p_now->next;
}
return 0;
}
int main()
{
num *head=creat();
pnum(head);
insert(head);
pnum(head);
P("按任意鍵繼續\n");
getchar();
getchar();
return 0;
}
#include<stdlib.h>
#include<string.h>
#define P printf
typedef struct num
{
int id;
struct num *next;
}num;
num* creat()
{
int id=0;
num *head=NULL;
num *pnow=NULL;
num *pnew=NULL;
head=(num *)malloc(sizeof(num));
head->id=-1;
pnow=head;
P("請輸入一個ID\n");
while(1)
{
scanf("%d",&id);
if(id==-1){break;}
pnew=(num *)malloc(sizeof(num)); //開闢一段新的記憶體空間
pnow->next=pnew; //將現在的next指向 新開闢的空間
//設定新記憶體的ID 與預設next空指向
pnew->id=id;
pnew->next=NULL;
pnow=pnew;//新開闢的記憶體空間 指向現在
}
P("head=%p\n",head);
return head;
}
int pnum(num *head)
{
num *p=head->next;
P("head=%p p=%p\n",head,p);
if(head==NULL){return -1;}
while(p!=NULL)
{
P("%p:%d->\n ",p,p->id);
p=p->next;
}
return 0;
}
int insert(num *head)
{
num *p_now=head->next;
num *p_last=head;
num *p_insert=NULL;
if(head==NULL){return -1;}
while(p_now!=NULL)
{
if(p_now->id==5)
{//找到ID=5的連結串列就 退出迴圈() 此時的p_now為ID==5的指標
p_insert=(num *)malloc(sizeof(num));
p_last->next=p_insert;
p_insert->id=4;
p_insert->next=p_now;
break;
}
p_last=p_now; //儲存以前的指標-last
p_now=p_now->next; //改變指標指向下一條
}
//p_now指向最後一個NULL(代表未找到匹配ID 新增到最後一個連結串列)
if(p_now==NULL)
{
p_now=(num *)malloc(sizeof(num));
p_last->next=p_now;
p_now->id=4;
p_now->next=NULL;
p_now=p_now->next;
}
return 0;
}
int main()
{
num *head=creat();
pnum(head);
insert(head);
pnum(head);
P("按任意鍵繼續\n");
getchar();
getchar();
return 0;
}