最近また手を出して挿入を書き直して、急速に並べ替えて、単鎖の表、環状の二重鎖の表、コードは以下の通りです

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;
}