設順序表A中的數據元素遞增有序,試寫一程序,將x插入到順序表的適當位置上,使該表仍然有序。

 

下面這個代碼是用單鏈表做的,順序表的做法過幾天再補上。

#include <iostream>
#include <cstdio>
#include <malloc.h>
#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; i<n; ++i) 
	{
		q = (LinkList)malloc(sizeof(Node));
		scanf("%d",&(q->data));
		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("\n");
}

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章