#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
LinkList CreateList(int n) {
int i;
LinkList head, p, q;
head = (LinkList)malloc(sizeof(LNode));
head->next = NULL;
q = head;
for (i = 0; i < n; i++) {
p = (LinkList)malloc(sizeof(LNode));
scanf("%d", &p->data);
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
LinkList MoveZeroLink(LinkList head) {
LinkList p, q, zeroHead, zeroTail, noHead, noTail;
zeroHead = (LinkList)malloc(sizeof(LNode));
noHead = (LinkList)malloc(sizeof(LNode));
zeroHead->next = NULL;
noHead->next = NULL;
zeroTail = zeroHead;
noTail = noHead;
p = head->next;
while (p != NULL) {
q = p->next;
if (p->data == 0) {
zeroTail->next = p;
zeroTail = p;
zeroTail->next = NULL;
} else {
noTail->next = p;
noTail = p;
noTail->next = NULL;
}
p = q;
}
zeroTail->next = noHead->next;
return zeroHead;
}
void PrintList(LinkList head) {
LinkList p;
p = head->next;
while (p != NULL) {
printf("%d", p->data);
if (p->next != NULL) {
printf(" ");
}
p = p->next;
}
}
int main() {
int n;
LinkList head, newHead;
scanf("%d", &n);
head = CreateList(n);
newHead = MoveZeroLink(head);
PrintList(newHead);
return 0;
}
c复制代码
#include <stdio.h>
#define MAXSIZE 1000
int main() {
int m, n, i, j, k;
int a[MAXSIZE], b[MAXSIZE], c[MAXSIZE];
i = 0;
j = 0;
k = 0;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++) {
scanf("%d", &a[i]);
}
i = 0;
for (i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
i = 0;
while (i < m && j < n) {
if (a[i] > b[j]) {
if (k == 0 || c[k-1] != a[i]) {
c[k] = a[i];
k = k + 1;
}
i = i + 1;
} else if (a[i] < b[j]) {
if (k == 0 || c[k-1] != b[j]) {
c[k] = b[j];
k = k + 1;
}
j = j + 1;
} else {
if (k == 0 || c[k-1] != a[i]) {
c[k] = a[i];
k = k + 1;
}
i = i + 1;
j = j + 1;
}
}
while (i < m) {
if (k == 0 || c[k-1] != a[i]) {
c[k] = a[i];
k = k + 1;
}
i = i + 1;
}
while (j < n) {
if (k == 0 || c[k-1] != b[j]) {
c[k] = b[j];
k = k + 1;
}
j = j + 1;
}
printf("%d\n", k);
for (i = 0; i < k; i++) {
printf("%d ", c[i]);
}
return 0;
}
c复制代码
#include <stdio.h>
#define MAXSIZE 1000
int main() {
int m, n, i, j, k;
int a[MAXSIZE], b[MAXSIZE], c[MAXSIZE];
i = 0;
j = 0;
k = 0;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++) {
scanf("%d", &a[i]);
}
i = 0;
for (i = 0; i < n; i++) {
scanf("%d", &b[i]);
}
i = 0;
while (i < m && j < n) {
if (a[i] > b[j]) {
if (k == 0 || c[k-1] != a[i]) {
c[k] = a[i];
k = k + 1;
}
i = i + 1;
} else if (a[i] < b[j]) {
if (k == 0 || c[k-1] != b[j]) {
c[k] = b[j];
k = k + 1;
}
j = j + 1;
} else {
if (k == 0 || c[k-1] != a[i]) {
c[k] = a[i];
k = k + 1;
}
i = i + 1;
j = j + 1;
}
}
while (i < m) {
if (k == 0 || c[k-1] != a[i]) {
c[k] = a[i];
k = k + 1;
}
i = i + 1;
}
while (j < n) {
if (k == 0 || c[k-1] != b[j]) {
c[k] = b[j];
k = k + 1;
}
j = j + 1;
}
printf("%d\n", k);
for (i = 0; i < k; i++) {
printf("%d ", c[i]);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
void CreatList_H(LinkList L, int n);
LinkList mergelinklist(LinkList La,LinkList Lb);
int main()
{
LinkList La,Lb,p;
int n,m;
scanf("%d %d",&n,&m);
La=(LNode*) malloc(sizeof(LNode));
CreatList_H(La,n);
Lb=(LNode*) malloc(sizeof(LNode));
CreatList_H(Lb,m);
La=mergelinklist(La,Lb);
p=La->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
return 0;
}
void CreatList_H(LinkList L, int n)
{
LinkList p;
int i;
L->next=NULL;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
}
LinkList mergelinklist(LinkList La,LinkList Lb)
{
LinkList pa,pb,pc,Lc,q;
pa=La->next;
pb=Lb->next;
Lc=La;
pc=Lc;
while(pa&&pb){
if(pa->data<pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if(pa->data==pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
q = pb;
pb = pb->next;
free(q);
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa) pc->next = pa;
else pc->next = pb;
return Lc;
}
c复制代码
/***字符串匹配算法***/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
#define MAXSTRLEN 255 /*用户可在255以内定义最长串长*/
typedef char SString[MAXSTRLEN+1]; /*0号单元存放串的长度*/
Status StrAssign(SString T, char *chars) { /*生成一个其值等于chars的串T*/
int i;
if (strlen(chars) > MAXSTRLEN)
return ERROR;
else {
T[0] = strlen(chars);
for (i = 1; i <= T[0]; i++)
T[i] = *(chars + i - 1);
return OK;
}
}
/*算法4.1 BF算法*/
int Index(SString S, SString T, int pos)
{
/*返回模式T在主串S中第pos个字符之后第一次出现的位置。若不存在,则返回值为0*/
/*其中,T非空,1≤pos≤StrLength(S)*/
int i = pos, j = 1;
while (i <= S[0] && j <= T[0])
{
if (S[i] == T[j])
{
i++;
j++;
}
else
{
i = i - j + 2;
j = 1;
}
}
if (j > T[0])
return i - T[0];
else
return 0;
}
int main()
{
SString S, T;
StrAssign(S, "bbaaabbaba");
/*生成一个其值等于"bbaaabbaba"的串S*/
StrAssign(T, "abb");
/*生成一个其值等于"abb"的串T*/
printf("Index result=%d\n",Index(S,T,1));
return 0;
}
c复制代码
#include <stdio.h>
#define MAX_SIZE 1000 // 数组最大长度,可根据需求调整
int main()
{
int n;
int arr[MAX_SIZE];
int target;
int process[MAX_SIZE]; // 记录每一次mid位置的元素值
int proc_count = 0; // 记录过程的步数
int left, right, mid;
int index = -1; // 目标值下标,初始为-1表示未找到
int i;
// 1. 读取数组长度n
scanf("%d", &n);
// 2. 读取逗号分隔的有序数组
for (i = 0; i < n; i++)
{
if (i == n - 1)
scanf("%d", &arr[i]); // 最后一个元素后没有逗号
else
scanf("%d,", &arr[i]); // 非最后一个元素,读取数字+逗号
}
// 3. 读取待查找的目标值k
scanf("%d", &target);
// 4. 折半查找核心逻辑
left = 0;
right = n - 1;
while (left <= right)
{
mid = (left + right) / 2; // 向下取整计算中间位置
process[proc_count++] = arr[mid]; // 记录本次mid位置的元素
if (arr[mid] == target)
{
index = mid; // 找到目标,记录下标
break;
}
else if (arr[mid] < target)
{
left = mid + 1; // 目标值更大,查找右半区间
}
else
{
right = mid - 1; // 目标值更小,查找左半区间
}
}
// 5. 输出查找过程(逗号分隔)
for (i = 0; i < proc_count; i++)
{
if (i == 0)
printf("%d", process[i]);
else
printf(",%d", process[i]);
}
printf("\n");
// 6. 输出查找结果
if (index != -1)
printf("%d\n", index);
else
printf("no\n");
return 0;
}
c复制代码
#include <stdio.h>
#include <stdlib.h>
// qsort 比较函数:升序排序
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int arr[10000]; // 数组最大容量,可根据需求调整
int n = 0; // 数组实际元素个数
int num, k;
int i;
char ch;
// 1. 读取第一行整数数组(以换行结束)
while (scanf("%d", &num) == 1)
{
arr[n++] = num;
ch = getchar();
if (ch == '\n') // 遇到换行,第一行读取结束
break;
ungetc(ch, stdin); // 非换行字符放回输入流,继续读取下一个数字
}
// 2. 读取 k 值
scanf("%d", &k);
// 3. 快速排序:从小到大
qsort(arr, n, sizeof(int), cmp);
// 4. 输出最小的 k 个数字,空格分隔
for (i = 0; i < k; i++)
{
if (i == 0)
printf("%d", arr[i]);
else
printf(" %d", arr[i]);
}
printf("\n");
return 0;
}