链表

#include <iostream>
using namespace std;

//LinkedList API
typedef struct ListNode {
int key;
struct ListNode * next;
struct ListNode * prev;
}ListNode;

#define LISTSIZE 1000
ListNode ListNodePool[LISTSIZE];
int NodeNum = 0;

ListNode nil;
ListNode * NIL;

ListNode * getNewNode(){
return & ListNodePool[NodeNum++];
}

void listInit(){
NIL = &nil;
NIL->next = NIL;
NIL->prev = NIL;
NIL->key = 0;
}

void listInsertAfter(ListNode * dstNode, ListNode * NewNode){
NewNode->next = dstNode->next;
NewNode->prev = dstNode;
dstNode->next = NewNode;
NewNode->next->prev = NewNode;
}

void listInsertAtFront(ListNode * node){
listInsertAfter(NIL, node);
}

void listDelete(ListNode * node){
node->prev->next = node->next;
node->next->prev = node->prev;
}

ListNode * listSearch(int k){
ListNode * x = NIL->next;
while(x != NIL && x->key != k){
x = x->next;
}
return x;
}

//end of LinkedList API

int data[LISTSIZE];

void insertSort(int data[], int N){
for(int i = 1; i < N; i++){
int key = data[i];
int j;
for(j = i - 1; j >= 0; j--){
if(data[j] > key){
data[j + 1] = data[j];
}else{
break;
}
}
data[j + 1] = key;
}
}

void showData(int N){
for(int i = 0; i < N; i++){
cout << data[i] << " ";
}
cout << endl;
}

void showList(){
ListNode * curNode = NIL->next;
while(curNode != NIL){
cout << curNode->key << " ";
curNode = curNode->next;
}
cout << endl;
}

void listInsertSort(){

ListNode * curNode = NIL->next->next;
ListNode * tmpNode;
while(curNode != NIL){
//cout << curNode->key << " " << endl;
ListNode * dstNode = NIL->next;
while(dstNode != curNode && dstNode->key < curNode->key){
dstNode = dstNode->next;
}

dstNode = dstNode->prev;
tmpNode = curNode->next;
listDelete(curNode);
listInsertAfter(dstNode, curNode);

curNode = tmpNode;
}
}


void main(){
freopen("input.txt", "r", stdin);
int N;
cin >> N;

for(int i = 0; i < N; i++){
cin >> data[i];
cout << data[i] << " " ;
}
cout << endl;

listInit();
ListNode * dstNode = NIL;
for(int i = 0; i < N; i++){
ListNode * node = getNewNode();
node->key = data[i];

listInsertAfter(dstNode, node);
dstNode = dstNode->next;
}

ListNode * curNode = NIL->next;
while(curNode != NIL){
cout << curNode->key << " ";
curNode = curNode->next;
}
cout << endl;

insertSort(data, N);
showData(N);

listInsertSort();
showList();
}

转载于:https://www.cnblogs.com/liunx1109/p/as.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值