LINUX链表的实现

[ 2008-7-20 21:48:00 | By: AmLinger ]

最近有兴接触到LINUX 和 UNIX 平台,所来无事,便静下心看数据结构,对里面的一些内容进行巩固.

经过1.5天的时间才把链表的头绪整明白.没有办法,人叫那个笨呀...

下面附上UNIX下的c 代码吧.

编译:cc -g a.c

调试:dbx a.out              或者  gdb  a.out

嘿嘿,当然直接在C下面编译应该是可以的,因为没有用到特别的库,应该可以通用编译.

#i nclude <stdio.h>
#i nclude <stdlib.h>

//定义链表结构
typedef struct _list
{
 char *str;
 struct _list *up;
 struct _list *down;
}*Plist,Tlist;
int listcount=0; //项目数量
Plist phead,ptail,ptemp; //临时变形指针
int ladd(char *str); //增加一个内容方法
void disp(); //显示所有内容
void freel(); //释放所有内容

int delete(int n); //删除指定位置的内容
int getcount();  //返回总的数量

void main()
{
 ladd("a\n"); //增加一个内容
 ladd("b\n"); //增加一个内容
 ladd("c\n"); //增加一个内容
 delete(2); //删除编号为2的内容
 printf("%d\n",getcount()); //显示当前数量
 disp(); //显示所有
 freel(); //释放所有
}
int ladd(char *str)
{
 ptemp=(Plist)calloc(sizeof(Tlist),1); //申请1个大小的内存
 ptemp->str=(char*)calloc(sizeof(char),strlen(str)+1); //动态申请字符长度
 strcpy(ptemp->str,str); //写入内容

 if (phead==NULL) //如果头指针为空
 {
 phead=ptail=ptemp; //头/尾=临时
 phead->down=ptail; //把头的上 下 地址修正
 phead->up=NULL;
 }
 else
 {
 ptail->down=ptemp; //尾的下一个 是当前的内容
 ptemp->up=ptail; //当前的上一个 是尾
 ptemp->down=NULL; //当前的下一个是空
 ptail=ptemp;  //尾修正为当前的内容
 }
 listcount++;  //数量增1
 return 1;  //返回
}
void disp()
{
 Plist o=phead;  //从首开始显示
 while(1)
 {
 printf("%s",o->str); //显示
 if (o->down==NULL) break; //如果到尾部则退出
 o=o->down;  //定位到 当前内容的下一个
 }
}
void freel()
{
 Plist o=phead;  //从首开始释放
 Plist T;
 while(1)
 {
 free(o->str);  //先释放字符部分
 T=o->down;  //保存下一个内容的地址
 free(o);  //释放当前对象
 if (o->down==NULL) break; //如果释放完成则退出.. 这里好像应该是 if (T==NULL) break;
 o=T;   //重新当前内容
 
 }
}
int getcount()
{
 return listcount; //返回当前总数量
}
int delete(n)
{
 Plist o=phead;  //从首开始查找
 n--;
 if (n<0 && n>listcount) return 0; //如果参数在指定范围内
 while(n--)
 {
  o=o->down;  //移动到指定位置.
 }
 o->up->down=o->down; //当前对象上一个对象的下一个对象变成当前对象的下一个对象.
 o->down->up=o->up; //当前下一个对象的上一个对象牙塔变成当前对象的上一个对象.
 free(o->str);  //释放当前对象字符
 free(o);  //释放当前对象
 listcount--;  //数量减1
 return 1;  //嘿嘿这里逻辑比较乱.. 返回吧.
}

发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:
    正在载入数据,请稍候……