| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5628 人关注过本帖, 1 人收藏
标题:单向循环链表操作实现~
只看楼主 加入收藏
xxyshow115
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-6-4
收藏(1)
 问题点数:0 回复次数:5 
单向循环链表操作实现~


/*1:输出单向循环链表的所有结点的值
2:查找第i个结点或值为某一个值的结点
3:在指定的地方插入一个结点
4:删除指定的结点
5: 退出系统*/




#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"
#include "iostream.h"
#define DATATYPE char
struct LINKLIST
{
DATATYPE data;
struct LINKLIST *next;
};

void print(struct LINKLIST *head) //输出链表元素
{
struct LINKLIST *p;//定义一个指针
p=head->next;
cout<<"输出元素值:";
while(p!=head)
{
cout<<p->data<<" ";
p=p->next;
}
}

void get(int i,struct LINKLIST *head)//按序号查找
{
struct LINKLIST *p;
int j;
j=0;
p=head;
while((j<i)&&(p->next!=head))
{
p=p->next;
j++;
}
if(j==i)
cout<<"您要找的第"<<i<<"个元素是:"<<p->data;
else
cout<<"没有找到您要找的元素!";
}

struct LINKLIST * locat(DATATYPE x,struct LINKLIST *head)//按值查找元素
{
struct LINKLIST *p;
p=head->next;
while(p!=head)
{
if(p->data==x)
{
return p;
}
else
{
p=p->next;
}
}
if(p==head)
{
return NULL;
}
}

void insertafter(DATATYPE insertdata,struct LINKLIST *p)//在已知结点之后插入一个结点
{
LINKLIST *t;
if(p)
{
t=(struct LINKLIST *)malloc(sizeof(struct LINKLIST));
t->data=insertdata;
t->next=p->next;
p->next=t;
}

}

int deletafter(struct LINKLIST *head,struct LINKLIST *p) // 删除后继结点
{
struct LINKLIST *t;
int r=1;
if(p->next!=head)
{
t=p->next;
p->next=t->next;
free(t);
}
else
r=0;
return r;
}

int deletself(struct LINKLIST *head,struct LINKLIST *p) //删除结点本身
{

LINKLIST *q;

q=head;
if(!p)
return 0;
else
while(q->next!=p && q->next!=head)
q=q->next;
q->next=p->next;
free(p);
return 1;


}
void main()
{
int i;
LINKLIST *p;
LINKLIST *head,*t,*last;
// p=head;

t=( LINKLIST *)malloc(sizeof(LINKLIST));//单链表的建立(尾插入法)
char ch,insertdata;
head=t;
last=t;
t->next=head;
printf("单链表元素为单个字符,连续输入(不要空格),以“0”为结束标志:\n");
while((ch=getchar())!='0')
{
t=( LINKLIST *)malloc(sizeof(LINKLIST));
t->data=ch;
t->next=head;

last->next=t;
last=t;
}
cout<<endl<<"/*********************************************/";
cout<<endl<<"/*************单向循环链表的操作**************/";
cout<<endl<<"/*********************************************/";
cout<<endl<<"/******************欢迎使用!*****************/";
cout<<endl<<"/*********************************************/";
cout<<endl<<"/*************制作者:xxyshow115、just、ㄣ黑銫禮ゞ菔******/";
cout<<endl<<"/*********************************************/";
cout<<endl<<endl<<"1………………………输出链表元素";
cout<<endl<<"2………………………按序号查找元素";
cout<<endl<<"3………………………按值查找元素";
cout<<endl<<"4………………………在指定结点后插入元素";
cout<<endl<<"5………………………删除后继结点";
cout<<endl<<"6………………………删除结点本身";
cout<<endl<<"7………………………退出系统";

do
{
cout<<endl<<"请选择您要执行的操作:";
cin>>i;
switch(i)
{
case 1:print(head);break;

case 2:int j;
cout<<"请输入你要查找的序号:";
cin>>j;
get(j,head);
break;

case 3:cout<<"请输入你要查找的字符:";
cin>>ch;
p=locat(ch,head);
if(p)
cout<<"已经找到你要的元素:"<<p->data;
else
cout<<endl<<"无此结点!";
break;

case 4: cout<<"在哪个结点后插入:";
cin>>ch;
p=locat(ch,head);
if(!p)
cout<<endl<<"您输入的值不存在!";
else
{
cout<<"插入结点值:";
cin>>insertdata;
insertafter(insertdata,p);
cout<<endl<<"操作后的链表为:";
print(head);
}
break;

case 5: cout<<"删除哪个结点的后继:";
cin>>ch;
p=locat(ch,head);
if(!p)
cout<<endl<<"您输入的值不存在!";
else
{
if(deletafter(head,p))
cout<<"删除成功!";
cout<<"操作后的链表为:";
print(head);
}
break;
case 6: cout<<"删除哪个结点:";
cin>>ch;
p=locat(ch,head);
if(!p)
cout<<endl<<"您输入的值不存在!";
else
{
if(deletself(head,p))
cout<<"删除成功!";
cout<<"操作后的链表为:";
print(head);
}
break;
case 7:exit(0);
}
}while(i!=7);
}


[此贴子已经被作者于2007-6-14 16:15:57编辑过]

搜索更多相关主题的帖子: 链表 结点 include LINKLIST 
2007-06-14 16:09
ㄣ黑銫禮ゞ菔
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-6-6
收藏
得分:0 
给我们一起做的程序顶一下!!

冰雪再寒冷严冬再漫长,也无法阻挡春的回归。可我们都忘却了,春天再逼近,也无法阻挡下一个冬天的来临……
2007-06-14 16:14
笨鸟先飞%
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-10-31
收藏
得分:0 
cout<<"输出元素值:"; - --看到这就有点觉得晕糊 .. . ..
while(p!=head)
{
cout<<p->data<<" ";- - -   这是什么版本的啊 。 。。  C ?   <<  是什么符号啊
2008-10-31 21:24
livuerfeifei
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-8-16
收藏
得分:0 
顶~
2010-08-18 11:05
天234
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-11-8
收藏
得分:0 
请问一下
case中的7:exit(0);与while循环中的(i!=7)有什么区别
2016-11-08 09:31
天234
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-11-8
收藏
得分:0 
请问一下
case中的7:exit(0);与while循环中的(i!=7)有什么区别
2016-11-08 09:31
快速回复:单向循环链表操作实现~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015370 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved