1. 程式人生 > >數據結構之約瑟夫問題(循環鏈表)(C++版)

數據結構之約瑟夫問題(循環鏈表)(C++版)

單鏈表 字母 exit 循環鏈表 urn list ext struct 插入

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef char ElemType;
typedef struct LNode{
ElemType data; //數據域
struct LNode *next; //指針域
}LNode, *SLink;

void InitList(SLink &L){
SLink p, r;
int n, j;
cout << "請輸入單鏈表元素個數:";
cin >> n;
//創建一個帶頭節點的空鏈表,L為指向頭節點的指針(頭指針)
L = (SLink) malloc (sizeof(LNode));
r = L;
if(!L) exit(0); //存儲空間分配失敗
cout << "請輸入單鏈表的元素:";
for(j = 0; j < n; j++)
{
p = (SLink) malloc (sizeof(LNode)); //生成新節點
cin >> p->data; //輸入元素值
r->next = p; r = p; //插入到表頭
}
r->next = NULL;
}//InitList

int main()
{
SLink B, D, L, p, q, rb, rd, rl;
InitList(L);
B = new LNode; B->next = B; //創建空循環鏈表存放字母
D = new LNode; D->next = D; //創建空循環鏈表存放數字
rb = B; rd = D; rl = L;
p = L; q = p->next;
while(q)
{
if((‘A‘ <= q->data) && (q->data <= ‘Z‘) || (‘a‘ <= q->data) && (q->data <= ‘z‘))
{
p->next = q->next; B->next = q; q->next = B; B = q; //尾插法
}
else if((‘0‘ <= q->data) && (q->data <= ‘9‘))
{
p->next = q->next; D->next = q; q->next = D; D = q;
}
else p = q;
q = p->next;
}
p->next = L; //將鏈表L構造為循環鏈表,存儲其他字符
while(rb->next != B)
{
rb = rb->next;
cout << rb->data << ‘ ‘;
}
cout << B->data << endl;
while(rd->next != D)
{
rd = rd->next;
cout << rd->data << ‘ ‘;
}
cout << D->data <<endl;
while(rl->next != L)
{
rl = rl->next;
cout << rl->data << ‘ ‘;
}
cout << endl;
return 0;
}

數據結構之約瑟夫問題(循環鏈表)(C++版)