×

欢迎光临,有什么想法就留言告诉我吧!

你的精彩评论可能会出现在这里哦! 留言抢沙发

关于我们

双向链表

Very2 Very2 发表于2026-08-06 浏览332 评论0
//双链表基本运算算法
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct DNode		//定义双链表结点类型
{
	ElemType data;
	struct DNode *prior;	//指向前驱结点
	struct DNode *next;		//指向后继结点
} DLinkNode;
void CreateListF(DLinkNode *&L,ElemType a[],int n)
//头插法建双链表
{
	DLinkNode *s;
	L=(DLinkNode *)malloc(sizeof(DLinkNode));  	//创建头结点
	L->prior=L->next=NULL;
	for (int i=0;i<n;i++)
	{	
		s=(DLinkNode *)malloc(sizeof(DLinkNode));//创建新结点
		s->data=a[i];
		s->next=L->next;			//将结点s插在原开始结点之前,头结点之后
		if (L->next!=NULL) L->next->prior=s;
		L->next=s;s->prior=L;
	}
}
void CreateListR(DLinkNode *&L,ElemType a[],int n)
//尾插法建双链表
{
	DLinkNode *s,*r;
	L=(DLinkNode *)malloc(sizeof(DLinkNode));  	//创建头结点
	L->prior=L->next=NULL;
	r=L;					//r始终指向终端结点,开始时指向头结点
	for (int i=0;i<n;i++)
	{	
		s=(DLinkNode *)malloc(sizeof(DLinkNode));//创建新结点
		s->data=a[i];
		r->next=s;s->prior=r;	//将结点s插入结点r之后
		r=s;
	}
	r->next=NULL;				//尾结点next域置为NULL
}
void InitList(DLinkNode *&L)
{
	L=(DLinkNode *)malloc(sizeof(DLinkNode));  	//创建头结点
	L->prior=L->next=NULL;
}
void DestroyList(DLinkNode *&L)
{
	DLinkNode *pre=L,*p=pre->next;
	while (p!=NULL)
	{
		free(pre);
		pre=p;
		p=pre->next;
	}
	free(pre);
}
bool ListEmpty(DLinkNode *L)
{
	return(L->next==NULL);
}
int ListLength(DLinkNode *L)
{
	DLinkNode *p=L;
	int i=0;
	while (p->next!=NULL)
	{
		i++;
		p=p->next;
	}
	return(i);
}
void DispList(DLinkNode *L)
{
	DLinkNode *p=L->next;
	while (p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
}
bool GetElem(DLinkNode *L,int i,ElemType &e)
{
	int j=0;
	DLinkNode *p=L;
	if (i<=0) return false;		//i错误返回假
	while (j<i && p!=NULL)
	{
		j++;
		p=p->next;
	}
	if (p==NULL)
		return false;
	else
	{
		e=p->data;
		return true;
	}
}
int LocateElem(DLinkNode *L,ElemType e)
{
	int n=1;
	DLinkNode *p=L->next;
	while (p!=NULL && p->data!=e)
	{
		n++;
		p=p->next;
	}
	if (p==NULL)
		return(0);
	else
		return(n);
}
bool ListInsert(DLinkNode *&L,int i,ElemType e)
{
	int j=0;
	DLinkNode *p=L,*s;
	if (i<=0) return false;		//i错误返回假
	while (j<i-1 && p!=NULL)
	{
		j++;
		p=p->next;
	}
	if (p==NULL)				//未找到第i-1个结点
		return false;
	else						//找到第i-1个结点p
	{
		s=(DLinkNode *)malloc(sizeof(DLinkNode));	//创建新结点s
		s->data=e;	
		s->next=p->next;		//将结点s插入到结点p之后
		if (p->next!=NULL) 
			p->next->prior=s;
		s->prior=p;
		p->next=s;
		return true;
	}
}
bool ListDelete(DLinkNode *&L,int i,ElemType &e)
{
	int j=0;
	DLinkNode *p=L,*q;
	if (i<=0) return false;		//i错误返回假
	while (j<i-1 && p!=NULL)
	{
		j++;
		p=p->next;
	}
	if (p==NULL)				//未找到第i-1个结点
		return false;
	else						//找到第i-1个结点p
	{
		q=p->next;				//q指向要删除的结点
		if (q==NULL) 
			return false;		//不存在第i个结点
		e=q->data;
		p->next=q->next;		//从单链表中删除*q结点
		if (p->next!=NULL) p->next->prior=p;
		free(q);				//释放q结点
		return true;
	}
}

关于我们

Game260707

Very2 Very2 发表于2026-07-07 浏览613 评论1
import random
name=["陈奕霖","李老师","张智芃","史蒂夫","艾利克斯","蛋仔"]
place=["马桶上","地铁上","冰箱里","大街上","李老师面前","自己的老婆面前"]
mood=["深情地","认真地","伤心地","哭着","疯狂地","开心"]
action=["啃","拉","舔","抠","亲","吃","运","喝","吐","嗦"]
thing=["棒棒糖","脚丫","手指","西瓜皮","粑粑","尿","李老师","子弹","豆包","牛粪","心脏"]
while(1):
    input("按回车键开始游戏")
    p1=random.choice(name)
    p2=random.choice(place)
    p3=random.choice(mood)
    p4=random.choice(action)
    p5=random.choice(thing)
    print(f"{p1}在{p2}{p3}{p4}{p5}")

关于我们

排序算法

Very2 Very2 发表于2026-06-13 浏览788 评论0

冒泡排序-普通版

#include <iostream>  
using namespace std;  
int a[1001], n;  
int main() {  
    cin >> n;  
    for (int i = 1; i <= n; i++)  
        cin >> a[i];  
    for (int i = 1; i <= n - 1; i++)  
        for (int j = 1; j <= n - i; j++)  
            if (a[j] > a[j + 1])  
                swap(a[j], a[j + 1]);  
    for (int i = 1; i <= n; i++)  
        cout << a[i] << " ";  
    return 0;  
}

关于我们

【例2.3】的算法:在顺序表L中删除所有值为x的元素

Very2 Very2 发表于2026-06-13 浏览523 评论0
//【例2.3】的算法:在顺序表L中删除所有值为x的元素
#include "sqlist.cpp"
void delnode1(SqList *&L,ElemType x)
{
int k=0,i;  //k记录值不等于x的元素个数
for  (i=0;i<L->length;i++) 
if (L->data[i]!=x)
{
L->data[k]=L->data[i];
k++;    //不等于x的元素增1
}
L->length=k;  //顺序表L的长度等于k
}
void delnode2(SqList *&L,ElemType x)
{ 
int k=0,i=0; //k记录值等于x的元素个数
while (i<L->length) 
{
if (L->data[i]==x) 
k++;
else 
L->data[i-k]=L->data[i]; //当前元素前移k个位置
i++;
}
L->length-=k;//顺序表L的长度递减k
}

int main()
{
ElemType a[]={1,2,2,1,0,2,4,2,3,1};
ElemType x=2;
SqList *L;
CreateList(L,a,10);
printf("L:");DispList(L);
printf("删除值为%d的元素\n",x);
delnode2(L,x);
printf("L:");DispList(L);
DestroyList(L);
return 1;
}