動態申請鍊錶
/*
動態申請鍊錶
陣列:靜態儲存,有序的資料集合,資料順序能夠對映實體地址,查詢快,插入刪除效率低
鍊錶:動態儲存,插入刪除效率高
*/#include
#include
typedef struct node
node;
node * createlink();
void printlink(node *head);
void freelink(node **phead);
/* *node* 鍊錶首位址
*int pos 插入新節點的位置
*int num 新節點的值域
*返回值: node* 將新鍊錶的首位址返回
*/node *insert(node* ,int pos,int num);
/* *引數:
* node** 指向鍊錶首位址的指標變數的位址
* int num 要刪除的值,若num和鍊錶中的某個節點的值域相等,則刪除該節點
*/void removenode(node **,int num);
node * insertasc(node *head,int num);
node *createlinksort();
int main(void)
//作業
node * insertasc(node *head,int num)
node *pf,*pb;//pf是要插入的前節點,pb是要插入位置的後節點
pf=pb=head;
while (pb!=
null
&& pb->i<
new->i)
if (pb==
null) else
return head;
}//刪除節點
void removenode(node **phead,int num)
if (pf==
null)
if (pf==*phead) else
free(pf);
}//插入節點
node *insert (node *head,int pos,int num)
newnode->i=num;
newnode->p=head;
head=newnode;
return head;
}int i=
1; node *pf=head;
while (inull)
if (pf==
null) else
newnode->i=num;
newnode->p=
null;
if (pf->p==
null) else
}return head;
}//釋放鍊錶
void freelink(node **phead)
else
printf("%d\n",pb->i);
free(pb);
pf->p=
null;}}
printf("\n");
}//列印節點
void printlink(node *head)
printf("\n");
}//建立無序鍊錶
node *createlink()
if (head==
null) else
newnode=
null;
}if (newnode!=
null)
//指向建立完成的鍊錶的首位址
return head;
}//建立有序鍊錶
node *createlinksort()
head=inse(head,i)
}if (newnode!=
null)
//指向建立完成的鍊錶的首位址
return head;
}
建立順序表並插入元素
//建立順序表並插入元素
#include
#include
#define listsize 100
struct sqlist ;
//插入元素
void insertlist(struct sqlist *l,int t,int i)
if (l->len>=listsize)
for (j=l->len-1; j>=i; i--)
l->data[i]=t;
l->len++;
}int main(void)
printf("插入完成後的表為:\n");
for (i=0; ilen; i++)
printf("\n");
return
0;}
建立鍊錶並向鍊錶中插入新節點
/*
建立鍊錶並向鍊錶中插入新節點
*/#include
#include
struct student ;
struct student *create(int n);
struct student *insertnode(struct student *head,char x,int i);
struct student *delnode(struct student *head,int i);
int main(void)
printf("\n");
return0;}
//建立鍊錶
struct student *create(int n)
else
p2->next=null;
}return head;
}//在鍊錶中新插入節點
struct student *insertnode(struct student *head,char x,int i)
if (!p||j>i-1)
s=(struct student *)malloc(sizeof(struct student));//申請節點空間
s->num=x; //為資料域賦值
s->next=p->next;
p->next=s;
}//刪除鍊錶中的節點
struct student *delnode(struct student *head,int i)
if (!p||j>i-1)
r=p->next;
p->next=r->next; //刪除節點
free(r);
}
從鍊錶中刪除節點
/*
從鍊錶中刪除節點
*/#include
#include
typedef
struct student
lnode, *linklist;
struct student *create(int n);
struct student *delnode(struct student *head,int i);
int main(void)
printf("\n");
return0;}
//建立鍊錶
struct student *create(int n)
else
p2->next=null;
}return head;
}struct student *delnode(struct student *head,int i)
if (!p||j>i-1)
r=p->next;
p->next=r->next; //刪除節點
free(r);
}
C語言學習筆記 鍊錶
鍊錶是一種常見的重要的資料結構。它是動態地進行儲存分配的一種結構。它可以根據需要開闢記憶體單元。鍊錶有乙個 頭指標 變數,以head表示,它存放乙個位址。該位址指向乙個元素。鍊錶中每乙個元素稱為 結點 每個結點都應包括兩個部分 一為使用者需要用的實際資料,二為下乙個結點的位址。因此,head指向第乙...
c語言學習筆記十三
結構體 示例 include int main void s s.a 1 s.b 2 s.c 3 s.d 4 printf u n sizeof s return 0 編譯 gcc test.c o 反彙編 objdump test 四個成員變數在棧上的排列 80483ed c6 44 24 14 ...
c語言學習筆記十三
結構體 示例 include int main void s s.a 1 s.b 2 s.c 3 s.d 4 printf u n sizeof s return 0 編譯 gcc test.c o 反彙編 objdump test 四個成員變數在棧上的排列 80483ed c6 44 24 14 ...