数据结构作业代码保存-2.1 单向循环链表的建立,插入和删除,和指针移动

来源:互联网 发布:本田数据库 编辑:程序博客网 时间:2024/04/29 14:25

在此感谢我亲爱的大神同学们!一个Z妹子讲情了思路,一个M妹子提供了更高级的双向循环链表的代码借鉴(虽然有些还是没怎么看懂。。。

我的作业就完成啦!保存代码当个纪念!

1,往操作位置顺时针的下一位插入一个元素,并将操作位置移到新元素上。

2,删掉操作位置顺时针方向的下一位。如果机器中没有数据,不做操作。

3,使得操作位置向顺时针移动一位。


#include<iostream>
#include<cstring>
using namespace std;
struct link{
char ch;    //save a character
link*next;  //--->
}; 


link *head,*tail,*current,*tp; /尾指针我以为我会用,但并没有。。。,C用来充当移动的指针,也就是指向操作的指针。
int node=0;  //确定结点个数,这样输出时比较方便确认输出范围


void meau(char ch);
void init();
struct link*creat(char ch);    //return head
void add(char ch);
void delate(); 
void move();
void display();


void display(){
while(node!=0){
cout<<current->ch;
current=current->next;
node--;
}
}
void move(){
current=current->next;
}
void delate(){
if(head==NULL)
return;
else{
current->next=current->next->next;
}
node--;
}
void add(char ch){
if(head==NULL)
head=current=tail=creat(ch);
else if(current->next==head){
tp=creat(ch);
tp->next=head;
current->next=tp;
current=current->next;
}
else{
tp=creat(ch);
tp->next=current->next;
current->next=tp;
current=current->next;
}
node++;
}
struct link*creat(char ch){
link*p=new link();
p->ch=ch;
p->next=p;
return p;
}
void init(){
head=tail=current=tp=0;
}
void meau(){
int num;
char ch1;
cin>>num;
switch(num){
case 1:cin>>ch1;add(ch1);break;
case 2:delate();break;
case 3:move();break;
default:break;
}

int main(){
int op;
char str[101];
cin>>op;
cin>>str;
for(int i=0;i<strlen(str);i++)
add(str[i]);
while(op>0){
meau();
op--;

display();
return 0;
}

0 0
原创粉丝点击