1基礎-1單鏈表
阿新 • • 發佈:2018-12-02
#include<iostream> #include<stdlib.h> using namespace std; typedef struct Node{ int data; //struct Node *prior; struct Node *next; }Node; void CreateRail(Node *head,int a[],int n){//輸入連結串列頭指標值,陣列,長度 Node *s,*r=head;//定義兩個臨時結點,s用於每次建立,賦給連結串列中的r(rail)結點 for(int i=1;i<=n;i++){//逐個點插入 s=(Node*)malloc(sizeof(Node));//S指向新結點 s->data=a[i];//值賦給結點的data r->next=s;//把這個結點賦給連結串列中的結點C r=r->next;//r指向它的後繼 } r->next=NULL;//尾指標的next為空 } void CreateFront(Node *&head,int a[],int n){//輸入連結串列頭指標引用,陣列,長度 Node* s;//定義臨時結點,因為要與不斷賦給頭指標,所以頭指標要引用傳入 for(int i=1;i<=n;i++){//逐個點插入 s=(Node*)malloc(sizeof(Node));//S指向新結點 s->data=a[i];//值賦給結點的data s->next=head->next;//頭結點的後繼賦給新結點 head->next=s;//然後頭結點指向新結點 } } Node* Search(Node *head,int x){//輸入頭結點及值X,輸出結點值為X的前驅 for(Node *p=head;p->next!=NULL;p=p->next)//從頭結點起掃到尾結點 if(p->next->data==x)//如果下一結點的值就是X(要修改結點值在此處修改) return p;//返回結點值為X的前驅 return NULL;//找不到就返回NULL } int Delete(Node *p){//輸入要刪除的結點的前驅 if(p->next==NULL)//如果當前結點就是尾結點 return 0;//返回0表示刪除失敗 else{//否則 Node *q=p->next;//讀出要刪除的結點 p->next=p->next->next;//當前結點的後繼指向後繼的後繼 free(q);//釋放要刪除的結點空間 return 1;//返回1表示刪除成功 } } void Insert(Node *p,int x){//輸入加入結點的前驅及新增結點的值 Node *s=(Node*)malloc(sizeof(Node));//建立新結點 s->data=x;//賦值 s->next=p->next;//賦後繼 p->next=s;//更新連結串列 } int main(){//本例程預設是有頭結點的,即第一個結點不存值 int a[11]={0,1,3,5,7,9,2,4,6,8,10};//定義陣列 //int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i]; Node *head1=(Node*)malloc(sizeof(Node));CreateRail(head1,a,10);//建立頭結點並用尾插法建表 for(Node *p=head1;p->next!=NULL;p=p->next)cout<<p->next->data<<' ';cout<<endl;//觀察連結串列 Node *tmp1=Search(head1,9);Delete(tmp1);//刪除連結串列中值為9的結點 for(Node *p=head1;p->next!=NULL;p=p->next)cout<<p->next->data<<' ';cout<<endl;//觀察連結串列 Node *head2=(Node*)malloc(sizeof(Node));CreateRail(head2,a,10);//建立頭結點並用頭插法建表 for(Node *p=head2;p->next!=NULL;p=p->next)cout<<p->next->data<<' ';cout<<endl;//觀察連結串列 Node *tmp2=Search(head2,8);Insert(tmp2->next,11);//在值為8的結點後加入值為11的結點 for(Node *p=head2;p->next!=NULL;p=p->next)cout<<p->next->data<<' ';cout<<endl;//觀察連結串列 return 0; } /***output 1 3 5 7 9 2 4 6 8 10 1 3 5 7 2 4 6 8 10 1 3 5 7 9 2 4 6 8 10 1 3 5 7 9 2 4 6 8 11 10 ***/