双向链表功能的实现包括插入删除修改查找等功
为比较好用的
源代码在线查看: 双向链表.txt
查看文章
双向循环链表的建立、插入、查找、删除、输出2008-09-11 22:55//编译环境:Dev-c++ 4.9.9.2
#include
#include
#define NULL 0
typedef char datatype;
typedef struct node
{
datatype data[20];
struct node *llink,*rlink;
}linklist;
/* 创建双向循环链表 */
linklist * create(int n)
{
linklist *p,*h,*s;
int i; /* 计数器*/
if((h=(linklist *)malloc(sizeof(linklist))) == NULL) /* 分配空间并检测 */
{
printf("不能分配内存空间!");
exit(0);
}
h->data[0]='\0'; /* 把表头结点的数据域置空 */
h->llink=NULL; /* 把表头结点的前趋链域置空 */
h->rlink=NULL; /* 把表头结点的后继链域置空 */
p=h; /* p指向表头结点 */
for(i=0;i {
if((s=(linklist *)malloc(sizeof(linklist))) == NULL) /* 生成新结点,分配空间并检测 */
{
printf("不能分配内存空间!");
exit(0);
}
p->rlink=s; /* 将p与s连接,p的后继指针指向s */
printf("请输入第%d个字符串:",i+1);
scanf("%s",s->data); /* 在当前结点数据域中存储数据 */
s->llink=p; /* s的前趋指针指向p */
s->rlink=NULL; /* 当前结点s的后继链域置空 */
p=s; /* p 指向当前结点*/
}
h->llink=s;
p->rlink=h;
return(h);
}
//输出链表
myprint(linklist * h)
{
linklist *p;
p=h->rlink;
while(p!=h)
{
printf("%s ",p->data);
p=p->rlink;
}
printf("\n");
}
//前插操作
dinsertbefore(linklist *p,char *x)
{
linklist *s;
s = malloc(sizeof(linklist));
strcpy(s->data,x); //插入字符串
s->llink = p->llink;
s->rlink = p;
p->llink->rlink =s;
p->llink = s;
}
//删除
deletenodep(linklist *p)
{
p->llink->rlink=p->rlink;
p->rlink->llink = p->llink;
free(p);
}
//查找
linklist * search(linklist *h,char *x)
{
char *y;
linklist *p;
p=h->rlink;
while(p!=h)
{
y=p->data;
if(strcmp(y,x) == 0)
{
return p;
}
else p=p->rlink;
}
printf("未找到!\n");
return NULL;
}
main()
{
linklist *L,*searchpoint;
char str[20];
L=create(3);
myprint(L);
// dinsertbefore(search(L,'ff'),'d');
printf("请输入你要查找的数据:");
scanf("%s",str);
// searchpoint = search(L,str);
printf("\n");
//printf("%s",searchpoint->data);
searchpoint=search(L,str);
if(searchpoint != NULL)
{
printf("你想在此节点前插入字符串:");
scanf("%s",str);
printf("\n");
dinsertbefore(searchpoint,str);
searchpoint=NULL;
myprint(L);
}
printf("请输入你要删除的数据:");
scanf("%s",str);
searchpoint=search(L,str);
if(searchpoint !=NULL)
{
deletenodep(searchpoint);
searchpoint=NULL;
myprint(L);
}
printf("\n");
getch();
}
|
相关资源 |
|
-
双向链表功能的实现包括插入删除修改查找等功
为比较好用的
-
本人常用的工业自动化控制,仪表、开关等控件非常好用的
-
数据结构单向链表的多少功能的实现
建立插入删除查找等功
-
一个比较好用的中文分词模块,是车东等人开发的,比较有名,java语言实现
-
一款比较好用的反编译软件。智能反编译器能自动区分代码段和数据段,使反编译出的源程序几乎不做任何修改即可进行再编译,使您更快捷地分析程序, 及修改再编译等。
-
jrtplib 的最新版本,比较好用的
-
st7920是现在比较好用的一款液晶显示控制器
-
这是一个串口调试程序,带有源代码的,还是比较好用的.
|