天天看点

链表的实战讲解(综合以前的基础)

这是前面我讲得算法与数据结构中链表的综合,如果这里不明白请看前面的基础知识:链接地址。

#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:

继续阅读