C語言學習筆記 十三 鍊錶 Chain

2021-06-29 04:24:52 字數 3979 閱讀 4610

動態申請鍊錶

/*

動態申請鍊錶

陣列:靜態儲存,有序的資料集合,資料順序能夠對映實體地址,查詢快,插入刪除效率低

鍊錶:動態儲存,插入刪除效率高

*/#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 ...