天天看點

連結清單的實戰講解(綜合以前的基礎)

這是前面我講得算法與資料結構中連結清單的綜合,如果這裡不明白請看前面的基礎知識:連結位址。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

/* 定義一個結構體 */

typedef struct name{

char *name;

struct name *pre;

struct name *next;

}t_name, *pt_name;

static pt_name   g_ptnamehead;    /* 定義連結清單頭 */

void add_name(pt_name ptnew)

{

pt_name ptcur;

if (g_ptnamehead == null)

g_ptnamehead = ptnew;

}

else

ptcur = g_ptnamehead;

while (ptcur->next)

ptcur = ptcur->next;

ptcur->next = ptnew;

ptnew->pre  = ptcur;

void del_name(pt_name ptdel)

pt_name ptpre;

pt_name ptnext;

if (g_ptnamehead == ptdel)   /* 如果連結清單頭等于目前删除的連結清單 */

g_ptnamehead = ptdel->next;

/* 釋放 */

return;

ptcur = g_ptnamehead->next;

while (ptcur)

if (ptcur == ptdel)

/* 從連結清單中删除 */

ptpre  = ptcur->pre;

ptnext = ptcur->next;

ptpre->next = ptnext;

if (ptnext)

ptnext->pre = ptpre;

break;

free(ptdel->name);

free(ptdel);

void add_one_name()

pt_name ptnew;

char *str;

char name[128];

printf("enter the name:");

scanf("%s", name);

str  = malloc(strlen(name) + 1);  

/* name是一個局部變量,用來存放名字,當這個函數結束的時候,該記憶體就得釋放,是以我們得單獨配置設定一塊内來存放這個name ,下面還得用malloc來配置設定一個結構體大的記憶體空間,記住我們定義結構體的時候不能添加static,因為定義結構提示不會配置設定記憶體空間的,他定義的隻是這種類型,是以我們增加的時候一定要記得配置設定記憶體*/

strcpy(str, name);

ptnew = malloc(sizeof(t_name));

ptnew->name = str;

ptnew->pre  = null;

ptnew->next = null;

add_name(ptnew);

pt_name get_name(char *name)

return null;

do {

if (strcmp(ptcur->name, name) == 0)

return ptcur;

}while (ptcur);

return nul;

void del_one_name()

pt_name ptfind;

ptfind = get_name(name);

if (ptfind == null)

printf("do not have this name\n");

return ;

del_name(ptfind);

void list_all_name(void)

int i = 0;

printf("%02d : %s\n", i++, ptcur->name);

int main(int argc, char **argv)

char c;

while (1)

printf("<l> list all the names\n");

printf("<a> add one name\n");

printf("<d> del one name\n");

printf("<x> exit\n");

printf("enter the choise: ");

c = getchar();

switch (c)

case 'l':

list_all_name();

case 'a':

add_one_name();

case 'd':

del_one_name();

case 'x':

return 0;

default:

繼續閱讀