最近また手を出して挿入を書き直して、急速に並べ替えて、単鎖の表、環状の二重鎖の表、コードは以下の通りです
8083 ワード
<pre name="code" class="cpp"><pre name="code" class="cpp">#include<iostream>
using namespace std;
// - , , , typedef struct list_node { list_node* next; int data; }list_node; typedef struct list { list_node* head; int size; }list; static list_node* creat_node(int val) { list_node* temp=(list_node*)malloc(sizeof(list_node)); temp->data=val; temp->next=NULL; return temp; } static void destroy_node(list_node* &node) { free(node); node=NULL; } // , , header->next, void init_list(list &List) { List.head=(list_node*)malloc(sizeof(list_node)); List.head->next=NULL; List.size=0; } bool insert_data(list &List,int val) { list_node* temp=creat_node(val); temp->next=List.head->next; List.head->next=temp; List.size++; return 1; } // flags 0, // flags 1, list_node* find_data(list List,int val,int flags) { list_node* temp=List.head; list_node* prior=List.head; while(temp->data!=val) { prior = temp; temp=temp->next; } return flags == 0? temp:prior; } bool delete_data(list &List,int val) { list_node* temp=find_data(List,val,1); list_node* ready_del_node=temp->next; temp->next=ready_del_node->next; free(ready_del_node); ready_del_node=NULL; List.size--; return 1; } int main() { list List; init_list(List); insert_data(List,1); insert_data(List,2); insert_data(List,3); insert_data(List,4); insert_data(List,5); list_node* p=List.head->next; for(int i=0;i<5;i++) { cout<<p->data<<endl; p=p->next; } cout<<endl; cout<<List.size<<endl; delete_data(List,1); p=List.head->next; for(int i=0;i<4;i++) { cout<<p->data; p=p->next; } return 0; }
#includeusing namespace std;//線形チェーンテーブル-環状二重チェーンテーブルtypedef struct double_list_node{struct double_list_node* prior;struct double_list_node* next;int data;}double_list_node;typedef struct double_list{double_list_node* header;int size;}double_list;//単一チェーンテーブルと同様に、ここにポインタ値のみが格納されるノードを追加し、ヘッダのpriorはデータ格納の最後の位置を指し、nextはデータ格納の最初の位置を指す//これにより、削除の論理判断に一貫性void init_を示すdouble_list(double_list &List){List.header=(double_list_node*)malloc(sizeof(double_list_node));List.header->prior=List.header;List.header->next=List.header;List.size=0;}void insert_data(double_list &List,int val){double_list_node* temp=(double_list_node*)malloc(sizeof(double_list_node));temp->data=val;temp->next=List.header->next;temp->prior=List.header;List.header->next->prior=temp;List.header->next=temp;}//現在の値と等しい値を探すノードポインタdouble_list_node* find_data(double_list List,int val){double_list_node* temp=List.header->next;while(temp->data!=val){temp=temp->next;}return temp;}void delete_data(double_list &List,int val){double_list_node* temp=find_data(List,val);temp->prior->next=temp->next;temp->next->prior=temp->prior;free(temp);temp=NULL;}int main(){double_list List;init_double_list(List);insert_data(List,5);insert_data(List,4);insert_data(List,3);insert_data(List,2);insert_data(List,1);double_list_node* temp=List.header->next;while(temp!=List.header){cout< data;temp=temp->next;}cout< next;while(temp!=List.header){cout< data;temp=temp->next;}}
int main() { <span style="white-space:pre"> </span>int ia[]={2,1,23,45,67,24,35,27}; <span style="white-space:pre"> </span>//vector<int>vec(ia,sizeof(ia)/sizeof(int)); <span style="white-space:pre"> </span>for(int i=1;i<sizeof(ia)/sizeof(int);i++) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>int key=ia[i]; <span style="white-space:pre"> </span>int m=i-1; <span style="white-space:pre"> </span>while(m>=0 && key<ia[m]) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>ia[m+1]=ia[m]; <span style="white-space:pre"> </span>m=m-1; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>ia[m+1]=key; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>for(int i=0;i<sizeof(ia)/sizeof(int);i++) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>cout<<ia[i]<<endl; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return 0; }
// , start ,finish , 0 int part(int a[],int start,int finish) { <span style="white-space:pre"> </span>int stand=a[finish]; <span style="white-space:pre"> </span>int i=start-1;// start-1 <span style="white-space:pre"> </span>for(int j=start;j<finish;j++)// start <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>if(stand>=a[j]) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>// i 1, a[j] a[i+1] <span style="white-space:pre"> </span>int temp; <span style="white-space:pre"> </span>i=i+1; <span style="white-space:pre"> </span>temp=a[i]; <span style="white-space:pre"> </span>a[i]=a[j]; <span style="white-space:pre"> </span>a[j]=temp; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>a[finish]=a[i+1]; <span style="white-space:pre"> </span>a[i+1]=stand; <span style="white-space:pre"> </span>return i+1; } void quick(int a[],int start,int finish) { <span style="white-space:pre"> </span>if(start<finish) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>int index=part(a,start,finish); <span style="white-space:pre"> </span>quick(a,start,index-1); <span style="white-space:pre"> </span>quick(a,index+1,finish); <span style="white-space:pre"> </span>} } int main() { <span style="white-space:pre"> </span>int ia[]={2,1,23,45,67,24,35,27};<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>quick(ia,0,7); <span style="white-space:pre"> </span>for(int i=0;i<sizeof(ia)/sizeof(int);i++) <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>cout<<ia[i]<<endl; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return 0; }