栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

一些基本操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一些基本操作

#include 
#include 
typedef struct LNode{
	struct LNode *next;
	int data;
}LNode,*linkList;

//表尾建单链表 
linkList List_TailInsert(linkList &L){
	int x;
	L=(LNode*)malloc(sizeof(LNode));
	LNode *r,*s;//r为表尾指针
	scanf("%d",&x);
	while(x!=9999){
		s=(linkList)malloc(sizeof(LNode));
		s->data=x;
		r->next=s;
		r=s;
		scanf("%d",&x);
	}
	r->next=NULL;
	return L; 
} 
//表头法
linkList List_HeadInsert(linkList &L){
	int x;//需要输入的数值
	LNode *s;//需要插入的结点 
	L=(linkList)malloc(sizeof(LNode));
	L->next=NULL;
	scanf("%d",&x);
	while(x!=9999){
		s=(linkList)malloc(sizeof(LNode));
		s->data=x;
		s->next=L->next;
		L->next=s;
		scanf("%d",&x);
	} 
	return L; 
} 
//按照序号查找结点 
LNode * GetElem(linkList L,int i){
	int j=1;//计数,初始为1 
	LNode *p=L->next;//头节点赋值给p 
	if(i==0){
		return L;//如果i=0,则返回头节点 
	}
	if(i<1){
		return NULL;//如果i<0,则返回null 
	} 
	while(p&&jnext;
		j++;
	}//最后一次循环结束,p就指向第i个结点 
	return p;
} 

//按值查找表结点
LNode * LocationElem(linkList L,int e){
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
	return p;
	}
} 

//插入结点
bool List_Insert(linkList &L,int i,int e){//在i的位置插入元素e 
	LNode *p=GetElem(L,i-1);//先找到第i个元素 
	if(p==NULL)//判断这个元素时候给空 
		return false;
	LNode *s=(LNode *)malloc(sizeof(LNode));
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true; 
} 

//删除结点
bool ListDelete(linkList &L,int i,int &e){//删除表L中第i个位置元素,并返回删除元素
	LNode *p=GetElem(L,i-1);//p是第i-1个结点
	if(p==NULL)
		return false;
	LNode *q=p->next;
	e=q->data;
	p->next=q->next;
	free(q);
	return true; 
}

int main(){
	linkList L;
	List_HeadInsert(L);//头插法建表
	linkList p;
	p=LocationElem(L,3); 
	
}
 
//队列
#include 
#include 
//队列只允许在一端进行插入,在另一端删除的线性操作
 //队头:需要删除的一端;队尾:允许插入的一端
 #define MaxSize 50
 #define ElemType int
 typedef struct {
 	ElemType data[MaxSize];//存放队列元素 
 	int front,rear;//队头指针和队尾指针 
 }SqQueue;

//队列初始化
void InitQueue(SqQueue &Q){
	Q.rear=Q.front=0;
} 
bool EnQueue(SqQueue &Q,ElemType x){
	if((Q.rear+1)%MaxSize==Q.rear)//rear指向最后一个结点,rear+1即指向第一个结点
		return false;
	Q.data[Q.rear]=x;
	Q.rear=(Q.rear+1)%MaxSize;//%MaxSize保证了始终在0和rear-1里边循环 
	return true; 
}

//出队
bool DeQueue(SqQueue &Q,ElemType &s){
	if(Q.rear==Q.front)
		return false;//头指针和尾指针同时指向一个结点,即队列为空
	s=Q.data[Q.front];
	Q.front=(Q.front+1)%MaxSize;
	return true; 
} 
//获得队头指针
bool GetHead(SqQueue Q,ElemType &s){
	if(Q.front==Q.rear)
		return false;
	s=Q.data[Q.front];
	return false;
} 

//获取队列元素个数:(rear+MaxSize-front)%MaxSize 

//队列,链式存储

#define Elemtype int
typedef struct linkNode{
	Elemtype data;
	struct linkNode *next;
}linkNode;//结点
typedef struct {
	linkNode *front ,*rear;
}linkQUeue; //头节点
//带头节点的初始化
 void InitQueue(linkQueue &Q){
 	Q.front=Q.rear=(linkNode*)malloc(sizeof(linkNode));
 	Q.front->next=null;
 } 
 
 //判空
 bool IsEmpty(linkQueue Q){
 	if(Q.front==Q.rear)//Q.front==NULL
 		return true;
 	else return false;
 } 
 //入队
 void EnQueue(linkQueue &Q,Elemtype x){
 	linkNode *s=(linkNode*)malloc(sizeof(Elemtype));
 	s->data=x;
 	s->next=NULL;//先把s的next赋空 
 	rear->next=s;//在把当前rear指向结点的next指向s 
 	Q.rear=s;//再把尾指针指向新节点s 
 } 
 
 //不带头节点的
 void InitQueue(linkQueue Q){
 	Q.front=Q.rear=NULL;
 } 
 //判空
 bool IsEmpty2(linkQueue Q){
 	if(Q.front==NULL)
 		return true;
 	else
 	return false;
 } 
 //不带头节点的要把插入第一个结点时特殊处理
//出队,带头节点的 
bool DeQueue (linkQueue &Q,Elemtype &x){
	if(Q.front==Q.rear)//判断是否为空结点 
		return false;
	linkNode *p=Q.front->next;//p指向front后一个结点 
	x=p->data;//x指向p的数据 
	Q.front->next=p->next; 
	if(Q.rear==p)//如果只有两个结点 
		Q.rear=Q.front;
	free(p);//释放p结点 
	return true;
}

//双端队列
 

#include 
#include 
//串
#define MaxLen 255
typedef struct{
	char ch[MaxLen];
	int length;
}SString;//顺序链表的存储 


typedef struct{
	char *ch;
	int length;
}HString;//动态链表的存储

//串的顺序存储有四种方式
//best方案:省略ch[0]然后在表尾添加一个变量表示length



typedef struct StringNode{
	char ch[4];
	struct StringNode *next; 
}StringNode,*String;



//普通的模式匹配算法
int Index(SString S,SString T){//S是父串,T是字串 
	int i=1,j=1;
	while(i<=S.length&&j<=T.length){
		if(S.ch[i]==T.ch[j]){
			++i;
			++j;
		}else{
			i=i+1-j+1;
			j=1;
		}
	}
	if(j>T.length)
		return i-T.length;
	else 
		return 0; 
} 

//KMP算法
//优化思路:主串指针不回溯,只有模式串指针回溯
int index(SString S,SString T,int next[]){
	int i=1,j=1;
	while(i<=S.length&&j<=T.length){
		if(j==0||S.ch[i]==T.ch[j]){
			++i;
			++j;
		}else{
			j=next[j];
		}
	}
	if(j>T.length)
		return i-T.length//如果找到了,返回开始的位置 
	else
		return 0; //如果没找到,返回0 
} 
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号