1. 程式人生 > >資料結構作業程式碼儲存-2.1 單向迴圈連結串列的建立,插入和刪除,和指標移動

資料結構作業程式碼儲存-2.1 單向迴圈連結串列的建立,插入和刪除,和指標移動

在此感謝我親愛的大神同學們!一個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;
}