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