intLoad_Sq(SqList& L){ if (L.length == 0) { printf("The List is empty!"); } else { printf("The List is: "); for (int i = 0; i < L.length; i++) { printf("%d ", L.elem[i]); } } printf("\n"); return OK; }
intListInsert_Sq(SqList& L, int i, int e){ if (i < 1 || i > L.length + 1) return ERROR;
#include<stdio.h> #include<malloc.h> #define ERROR 0 #define OK 1 #define ElemType int
typedefstructLNode { int data; structLNode* next; }LNode, * LinkList;
intCreateLink_L(LinkList& L, int n){ // 创建含有n个元素的单链表 LinkList p, q; int i; ElemType e; L = new LNode; L->next = NULL; // 先建立一个带头结点的单链表 q = L; for (i = 0; i < n; i++) { scanf("%d", &e); p = new LNode;// 生成新结点 p->data = e; q->next = p; p->next = NULL; q = p; } return OK; }
intLoadLink_L(LinkList& L){ // 单链表遍历 LinkList p = L->next; if (!p)printf("The List is empty!"); // 请填空 else { printf("The LinkList is:"); while (p) // 请填空 { printf("%d ", p->data); p = p->next; // 请填空 } } printf("\n"); return OK; }
intLinkInsert_L(LinkList& L, int i, ElemType e){ // 算法2.9 // 在带头结点的单链线性表L中第i个位置之前插入元素e if (i<1) { return ERROR; }
LinkList p = L; int count = 0; while (p&&count<i-1) { p = p->next; count++; } if (!p) { return ERROR; } LinkList r = new LNode; r->data = e; r->next = p->next; p->next = r; return OK; }
intLinkDelete_L(LinkList& L, int i, ElemType& e){ // 算法2.10 // 在带头结点的单链线性表L中,删除第i个元素,并用e返回其值
if (i<1) { return ERROR; }
LinkList p = L; int count = 0; while (p&&count<i-1) { p = p->next; count++; } if (!p||!p->next) { return ERROR; } e = p->next->data; LinkList q = p->next; p->next = q->next; delete q; return OK; }
intmain() { LinkList T; int a, n, i; ElemType x, e; printf("Please input the init size of the linklist:\n"); scanf("%d", &n); printf("Please input the %d element of the linklist:\n", n); if (CreateLink_L(T,n)) // 判断链表是否创建成功,请填空 { printf("A Link List Has Created.\n"); LoadLink_L(T); } while (1) { printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n"); scanf("%d", &a); switch (a) { case1: scanf("%d%d", &i, &x); if (!LinkInsert_L(T,i,x)) printf("Insert Error!\n"); // 判断i值是否合法,请填空 elseprintf("The Element %d is Successfully Inserted!\n", x); break; case2: scanf("%d", &i); if (!LinkDelete_L(T,i,e)) printf("Delete Error!\n"); // 判断i值是否合法,请填空 elseprintf("The Element %d is Successfully Deleted!\n", e); break; case3: LoadLink_L(T); break; case0: return1; } } }
Status StackTraverse(SqStack S) { // 从栈顶到栈底依次输出栈中的每个元素 SElemType* p = S.top; //请填空 if (p==S.base)printf("The Stack is Empty!"); //请填空 else { printf("The Stack is: "); while (p!=S.base) //请填空 { p--; //请填空 printf("%d ", *p);
} } printf("\n"); return OK; }
intmain() { int a; SqStack S; SElemType x, e; if (InitStack(S)) // 判断顺序表是否创建成功,请填空 { printf("A Stack Has Created.\n"); } while (1) { printf("1:Push \n2:Pop \n3:Get the Top \n4:Return the Length of the Stack\n5:Load the Stack\n0:Exit\nPlease choose:\n"); scanf("%d", &a); switch (a) { case1: scanf("%d", &x); if (!Push(S,x)) printf("Push Error!\n"); // 判断Push是否合法,请填空 elseprintf("The Element %d is Successfully Pushed!\n", x); break; case2: if (!Pop(S,e)) printf("Pop Error!\n"); // 判断Pop是否合法,请填空 elseprintf("The Element %d is Successfully Poped!\n", e); break; case3: if (!GetTop(S,e))printf("Get Top Error!\n"); // 判断Get Top是否合法,请填空 elseprintf("The Top Element is %d!\n", e); break; case4: printf("The Length of the Stack is %d!\n", StackLength(S)); //请填空 break; case5: StackTraverse(S); //请填空 break; case0: return1; } } }
Status QueueTraverse(SqQueue Q) { // 若队列不空,则从队头到队尾依次输出各个队列元素,并返回OK;否则返回ERROR. int i; i = Q.front; if (Q.rear==Q.front)printf("The Queue is Empty!"); //请填空 else { printf("The Queue is: "); while (i!=Q.rear) //请填空 { printf("%d ", Q.base[i]); //请填空 i = (i+1)%MAXQSIZE; //请填空 } } printf("\n"); return OK; }
intmain() { int a; SqQueue S; QElemType x, e; if (InitQueue(S)) // 判断顺序表是否创建成功,请填空 { printf("A Queue Has Created.\n"); } while (1) { printf("1:Enter \n2:Delete \n3:Get the Front \n4:Return the Length of the Queue\n5:Load the Queue\n0:Exit\nPlease choose:\n"); scanf("%d", &a); switch (a) { case1: scanf("%d", &x); if (!EnQueue(S,x)) printf("Enter Error!\n"); // 判断入队是否合法,请填空 elseprintf("The Element %d is Successfully Entered!\n", x); break; case2: if (!DeQueue(S,e)) printf("Delete Error!\n"); // 判断出队是否合法,请填空 elseprintf("The Element %d is Successfully Deleted!\n", e); break; case3: if (!GetHead(S,e))printf("Get Head Error!\n"); // 判断Get Head是否合法,请填空 elseprintf("The Head of the Queue is %d!\n", e); break; case4: printf("The Length of the Queue is %d!\n", QueueLength(S)); //请填空 break; case5: QueueTraverse(S);//请填空 break; case0: return1; } } }
intmain() { int t; cin >> t; while (t--) { int n; cin >> n; vector<int>nums(n); for (int&p:nums) { cin >> p; } int i = 0, j = n - 1; while (i<j) { int flag1=1,flag2=1; if (nums[i]<=0) { i++; flag1 = 0; }
if (nums[j]>0) { j--; flag2 = 0; }
if (flag1&&flag2) { swap(nums[i],nums[j]); } } for (int k:nums) { cout << k<<' '; } cout << endl; }
#include<iostream> #include<vector> #include<algorithm> usingnamespace std; intmain() { int n; cin >> n; vector<int>nums(n); for (int &k:nums) { cin >> k; } int key; cin >> key; int i; for ( i=0;i<n;i++) { if (nums[i]==key) { cout << "The element position is " << i + 1<<'.'; break; } }
if (i==n) { cout << "The element is not exist."; }
intmain() { int n; cin >> n; vector<int>nums; for (int i=0;i<n;i++) { int x; cin >> x; nums.push_back(x); } int k; cin >> k; int low = 0, high = n - 1; while (low<=high) { int mid = (low+high) / 2; if (nums[mid] == k) { cout << "The element position is " << mid<<'.'; return0; }
intmain() { vector<int>nums; int n; cin >> n; for (int i=0;i<n;i++) { int x; cin >> x; nums.push_back(x); } for (int i=1;i<nums.size();i++) { int tmp = nums[i]; int low = 0; int high = i - 1; while (low<=high) { int mid = (low+high) / 2; if (nums[mid] < tmp) { low = mid + 1; }
else high = mid - 1; } for (int j=i-1;j>=low;j--) { nums[j + 1] = nums[j]; } nums[low] = tmp; for (int p:nums) { cout << p << ' '; } cout << endl;
voidheapif(vector<int>&nums,int n,int i) { int largest = i; int left = 2 * i + 1; int right = 2 * i + 2; if (left<n&&nums[left]>nums[largest]) { largest = left; }
if (right<n&&nums[right]>nums[largest]) { largest = right; }
if (i!=largest) { swap(nums[largest],nums[i]); heapif(nums,n,largest); } }
voidload(vector<int>&nums) { for (int k:nums) { cout << k << ' '; } cout << endl; }
voidheapsort(vector<int>&nums) { int n = nums.size(); for (int i=2*n-1;i>=0;i--) { heapif(nums,n,i); } for (int i=n-1;i>0;i--) { load(nums); swap(nums[0],nums[i]); heapif(nums,i,0); } load(nums); }
intmain() { int n; cin >> n; vector<int>nums(n); for (auto& p : nums) { cin >> p; } heapsort(nums); return0; }
voidload(vector<int>&nums) { for (int i:nums) { cout << i << ' '; } cout << endl; }
voidmergesort(vector<int>&nums) { int n = nums.size(); vector<int>tmp(n); for (int size=1;size<n;size*=2) { for (int left=0;left<n;left+=2*size) { int mid = min(left+size,n); int right = min(left+2*size,n); int i = left, j = mid, k = left; while (i<mid&&j<right) { if (nums[i] <= nums[j]) { tmp[k++] = nums[i++]; }
else tmp[k++] = nums[j++]; }
while (i<mid) { tmp[k++] = nums[i++]; } while (j<right) { tmp[k++] = nums[j++]; }
#include<iostream> usingnamespace std; intmain() { int g[100][100] = {0}; int n, m; cin >> n >> m; for (int i=0;i<m;i++) { int x, y; cin >> x >> y; g[x][y] = 1; } for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { cout << g[i][j] << ' '; } cout << endl; }
voidbfs(int x,vector<stack<int>>&e,vector<int>&visit,vector<string>v) { queue<int>q; q.push(x); visit[x] = 1; while (!q.empty()) { int t = q.front(); cout << v[t] << ' '; q.pop(); int size = e[t].size(); for (int i=1;i<=size;i++) { int y = e[t].top(); e[t].pop(); if (!visit[y]) { visit[y] = 1; q.push(y); } } } }
voiddfs(int x, vector<stack<int>>& e, vector<int>& visit, vector<string>v) { if (visit[x]) { return; } visit[x] = 1; cout << v[x] << ' '; int size = e[x].size(); for (int i=1;i<=size;i++) { int t = e[x].top(); e[x].pop(); if (!visit[t]) { visit[t] = 1; cout << v[t] << ' '; dfs(t,e,visit,v); } } }
intmain() { int type; cin >> type; cin >> n >> m; vector<stack<int>>e(n+1); vector<string>v(n+1); vector<int>visit(n+1,0); for (int i=1;i<=n;i++) { cin >> v[i]; } string a, b; int w; for (int i=1;i<=m;i++) { if (type == 0 || type == 2) { cin >> a >> b; } else cin >> a >> b >> w; int x = -1, y = -1; for (int j=1;j<=n;j++) { if (v[j]==a) { x = j; } if (v[j] == b) { y = j; } if (x!=-1&&y!=-1) { break; } } if (type<=1) { e[x].push(y); } else { e[x].push(y); e[y].push(x); } } for (int i=1;i<=n;i++) { if (!visit[i]) { dfs(i,e,visit,v); } } return0; }
#include<iostream> #include<vector> usingnamespace std; intmain() { int n, m; cin >> n >> m; vector<vector<int>>arrow(n+1, vector<int>(n+1,0)); vector<int>ans; vector<bool>mark(n+1,false); for (int i=1;i<=m;i++) { int x, y; cin >> x >> y; arrow[x][y] = 1; } while (ans.size()<n) { for (int i=1;i<=n;i++) { int flag=1;
if (mark[i]) { continue; }
for (int j = 1; j <= n; j++) { if (arrow[j][i]) { flag = 0; break; } }
if (flag) { ans.push_back(i); mark[i] = true; for (int k=1;k<=n;k++) { arrow[i][k] = 0; } break; } } } for (int i:ans) { cout << i << ' '; } cout << endl; return0; }
intmain() { int n, m; cin >> n >> m; vector<int>len; vector<vector<int>>arrow(n+1, vector<int>(n+1,0)); vector<int>ans; vector<bool>mark(n+1,false); for (int i=1;i<=m;i++) { int x, y, v; cin >> x >> y >> v; arrow[x][y] = 1; dp[x][y]=v; } while (ans.size()<n) { for (int i=1;i<=n;i++) { int flag=1;
if (mark[i]) { continue; }
for (int j = 1; j <= n; j++) { if (arrow[j][i]) { flag = 0; break; } }
if (flag) { for (int k=1;k<=n;k++) { if (arrow[i][k]) { dp[1][k] = max(dp[1][i] + dp[i][k],dp[1][k]); } } mark[i] = true; ans.push_back(i); for (int k = 1; k <= n; k++) { arrow[i][k] = 0; } break; } } } cout << dp[1][n] << endl; return0; }