順序表Aのデータ要素が順序を増し、手順を書いてみて、xを順序表の適切な位置に挿入し、このテーブルを依然として秩序化させる.

3290 ワード

次の2つの方法を提供します.順番表とシングルチェーン表でそれぞれ実現します.
順序表:
#include 
#include 
#include 
#include 
using namespace std;
const int  LIST_INIT_SIZE = 100;
const int  LISTINCREASEMEMT = 10;

//       
typedef int ElemType;
//         
typedef struct{
	ElemType *elem;
	int length;
	int listsize;
}SqList;

//       
bool InitList_Sq(SqList &L){
	L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if(!L.elem){
		return false;
	}
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return true;
}

//             (       )
bool ListInsert_Sq(SqList &L, ElemType e){
	ElemType *newbase; 
	//       ,     
	if(L.length >= L.listsize){
		newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREASEMEMT) * sizeof(ElemType));
		if(!newbase){
			return false;
		}//      
		L.elem = newbase;
		L.listsize += LISTINCREASEMEMT;
	}
	//          
	int i;
	for(i=0; i e){
			break;
		}   
	}
	ElemType *q = &(L.elem[i]);
	ElemType *p=&(L.elem[L.length-1]);
	for(q; p>=q; p--){
		*(p+1) = *p;
	}
	*q = e;
	++L.length;
	return true;
}

//      
bool Print(SqList &L){
	for(int i=0; i> len;
	cout << endl << "        " << len << "   :";
	for(int i=0; i
シングルリスト:
#include 
#include 
#include 
#define LIST_INIT_SIZE 100
#define LISTINCREASEMEMT 10
using namespace std;
typedef int ElemType;  //           

//       
typedef struct Node
{
	ElemType data;     //    
	struct Node *next; //    
}Node,*LinkList;
LinkList p, q, flag;

//     
void CreateList(LinkList &A, int n) 
{
	A=(LinkList)malloc(sizeof(Node));
	p = A;
	for(int i=0; idata));
		p->next = q;
		q->next = NULL;
		p = q;
	}
}


//              (       )
void Insert(LinkList &L, int n, ElemType &x){
	p = L->next;
	q = (LinkList)malloc(sizeof(Node));
	flag = (LinkList)malloc(sizeof(Node));
	q->data = x;
	
	for(int i=1; i<=n; i++){
		if(p->data < x && i!=n){
			flag = p;
			p = p->next;
			
		} 
		else if(i == n){
			flag->next = q;
			q->next = NULL;
		}
		else{
			q->next = flag->next;
			flag->next = q;
			break;
		}
     }
}

//      
void PrintfList(LinkList &L, int n){
     p = L->next;
     printf("%d", p->data);
     for(int i=2; i<=n; ++i)
     {
		p = p->next;
		printf(" %d", p->data);
     }
     printf("
"); } int main(int argc, char** argv) { LinkList A; ElemType x; int len; cout << " :"; cin >> len; cout << endl << " " << len << " :"; CreateList(A, len); cout << endl << " :"; scanf("%d", &x); Insert(A, len, x); cout << endl << " :"; PrintfList(A, len+1); return 0; }