⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 双向链表.txt

📁 双向链表功能的实现包括插入删除修改查找等功 为比较好用的
💻 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 + -