双向链表功能的实现包括插入删除修改查找等功 为比较好用的

源代码在线查看: 双向链表.txt

软件大小: 2 K
上传用户: chenqiyun1990
关键词: 删除 修改 比较
下载地址: 免注册下载 普通下载 VIP

相关代码

				  查看文章    
				双向循环链表的建立、插入、查找、删除、输出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();      
				      }
				 
							

相关资源