📄 双向链表.txt
字号:
查看文章
双向循环链表的建立、插入、查找、删除、输出2008-09-11 22:55//编译环境:Dev-c++ 4.9.9.2
#include<stdio.h>
#include<malloc.h>
#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<n;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();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -