数据结构c语言查找函数,从一组数据中查找数据c语言
C语言数据结构求解
方法很多,可以在插入数据后再对线性表进行删改,也可以在插入前进行处理。
十年的德清网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整德清建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“德清网站设计”,“德清网站推广”以来,每个客户项目都认真落实执行。
我这里代码是在插入前处理。
(注释掉的函数int getPNUM(struct Sqlist *st,int n);是我预留的,题2如果你想改成插入后,再对线性表素数进行查找,可以用这个函数。否则可以删除)。
#include stdio.h
#include stdlib.h
#include time.h
#define LIST_INIT_SIZE 800
struct Sqlist{
int *elem;
int length;
int listsize;
};
int insert2List(struct Sqlist *st,int num,int inx);//向线性表第inx个元素的位置插入一个元素。成功返回1,失败返回0
int findNum(struct Sqlist *st,int num);//在线性表中查找指定数字,存在返回1,不存在返回0
//int getPNUM(struct Sqlist *st,int n);//查找素数,返回第几n个素数的下标。未找到返回-1
void showList(struct Sqlist *st);//打印线性表
void clearList(struct Sqlist *st);//清空线性表
int main()
{
int i,k,nums[LIST_INIT_SIZE],n,num,cnt,flag;
struct Sqlist st={nums,0,LIST_INIT_SIZE};
srand(time(NULL));
//--------------题1-----------------------------------------------------------------------
n=100;
k=1;
printf("1、随机生成100个【100,200】之间的随机数,去除重复并保存到线性表\n");
while(n--)
{
num=rand()%101+100;
printf("--%3d产生随机数%d\n",k++,num);
if(findNum(st,num))
printf("该数字已在线性表中存在,重复去除\n");
else
{
if(insert2List(st,num,st.length+1))
printf("该随机值已保存到线性表尾部\n");
else{
printf("异常!插入失败!\n");
return 1;
}
}
}
showList(st);
clearList(st);
//-------------题2----------------------------------------------------------------
n=20;
cnt=0;
k=1;
printf("1、随机生成20个【1,200】之间的随机数,在第一个素数后插入1个0,第二个素数后插入2个0,以此类推,最后输出所有元素\n");
while(n--)
{
num=rand()%200+1;
printf("--%3d产生随机数%d\n",k++,num);
flag=1;
for(i=2;inum;i++)
if(num%i==0)
{
flag=0;
break;
}
if(flag)
{
cnt++;
printf("该随机值是一个素数,在其尾部插入%d个0\n",cnt);
for(i=0;icnt;i++)
num*=10;
printf("该随机值变更为%d\n",num);
}
if(insert2List(st,num,st.length+1))
printf("该随机值已保存到线性表尾部\n");
else{
printf("异常!插入失败!\n");
return 1;
}
}
showList(st);
return 0;
}
void clearList(struct Sqlist *st)//清空线性表
{
st-length=0;
printf("线性表数据已清除\n");
}
void showList(struct Sqlist *st)//打印线性表
{
int i;
printf("当前线性表的数据为:\n");
for(i=0;ist-length;i++)
printf("%d ",st-elem[i]);
printf("\n");
}
int findNum(struct Sqlist *st,int num)//在线性表中查找指定数字,存在返回1,不存在返回0
{
int *p=st-elem;
while(p=st-elem[st-length-1])
if(*p++==num)
return 1;
return 0;
}
/*
int getPNUM(struct Sqlist *st,int n)//查找素数,返回第几n个素数的下标。未找到返回-1
{
int i,j,flag,cnt=0;
for(i=0;ist-length;i++)
{
flag=1;
for(j=2;jst-elem[i];j++)
if(st-elem[i]%j==0)
{
flag=0;
break;
}
if(flag)
cnt++;
if(cnt==n)
return i;
}
return -1;
}
*/
int insert2List(struct Sqlist *st,int num,int inx)//向线性表第inx个元素的位置插入一个元素。成功返回1,失败返回0
{
int i;
if(st-length==st-listsize)
{
printf("线性表已满,插入失败!\n");
return 0;
}
if(inx1 inxst-length+1)
{
printf("插入位置无效!线性表当前数据长度为%d,插入位置必须大于1且不能大于%d!\n",st-length,st-length+1);
return 0;
}
for(i=st-length;i=inx;i--)
st-elem[i]=st-elem[i-1];
st-elem[inx-1]=num;
st-length++;
return 1;
}
数据结构 c语言版 ——顺序表的查找、插入与删除
#includestdio.h
#includestdlib.h
#define N 10 //顺序表的最大容量
int length=0; //顺序表的当前元素个数
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//线性表存储的空间初始化分配量
#define LISTINCREAMENT 10 //线性表存储空间的分配增量
typedef struct LNode//线性单链表存储结构
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreatList_L(LinkListL)//创建一个线性链表
{
L=(LinkList)malloc(sizeof(LNode));//分配一个空间给链表,作为头结点
if(!L) exit(OVERFLOW);
L-next=NULL;
return OK;
}
int DestroyList_L(LinkList L)//销毁链表
{
if(L) free(L);
return OK;
}
int ListInsert_L(LinkListL,int i,int e)//再练表的第i个元素前插入一个元素e
{
LinkList p=L;//p指针定位于i-1
LNode *s;
int j=0;
while(pji-1) {p=p-next;j++;}//定位
if(!p||ji-1) return ERROR;//如果i1或大于链表元素个数+1
s=(LNode*)malloc(sizeof(LNode));
if(!s) exit(OVERFLOW);
s-data=e; //完成插入操作
s-next=p-next;
p-next=s;
return OK;
}
int ListDelet_L(LinkListL,int i,inte)//删除链表L中的第i个元素,并返回给e;
{
LinkList p=L;
LNode* q;
int j=0;
while(!pji-1) {p=p-next;j++;}//p指针定位于i-1;
if(!p-next||ji-1) return ERROR;
e=p-next-data; //完成删除操作
q=p-next;
p-next=p-next-next;
free(q);
return OK;
}
int ListTraverse_L(LinkList L,int n)//链表的遍历
{
int i=0;
if(!L)return ERROR;
L=L-next;
while(L)
{
if(L-data==n)return i;
L=L-next;
i++;
}
return FALSE;
}
int InverseSingleList_L(LinkList L)
{
if(!L-next||!L-next-next)//如果链表少于2个Node那么链表不需要改变顺序
return OK;
LNode *p,*q;
p=L-next; //第一次因为p是最后一个连接所以把p-next设为空
q=p-next;
p-next=NULL;
p=q;
while(p)
{
q=p-next; //用q去保留p后面一个Node;
p-next=L-next;
L-next=p;
p=q;
}
return OK;
}
int main()
{
int List[N];
LinkList L;
int ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.创建一个顺序表 .........(1) *\n");
printf("\t\t* 2.在顺序表中查找元表.........(2) *\n");
printf("\t\t* 3.在顺序表中插入元表.........(3) *\n");
printf("\t\t* 4.在顺序表中删除元表.........(4) *\n");
printf("\t\t* 5.退出 .........(5) *\n");
printf("\t\t********************************************\n");
printf("\n请选择操作代码:");
ch=getchar();
switch(ch)
{
case '1':
printf("\n请输入十个元素");
CreatList_L(L);
for(length=0;lengthN;length++)
{
scanf("%d",List[length]);
getchar();
ListInsert_L(L,length+1,List[length]);
}
printf("\n创建成功!");
getchar();
break;
case '2':
scanf("%d",List[0]);
if(ListTraverse_L(L,List[0]))printf("该元素存在该年表的第%d个位置",ListTraverse_L(L,List[0]));
else printf("不存在该元素");
getchar();
break;
case '3':
scanf("%d%d",length,List[0]);
ListInsert_L(L,length,List[0]);
system("pause");
break;
case '4':
scanf("%d",length);
ListDelet_L(L,length,List[0]);
system("pause");
break;
case '5':
printf("\n您是否真的要退出程序(Y/N):");
getchar();
exit=getchar();
break;
default:
getchar();
printf("\n无效输入,请重新选择...:");
getchar();
break;
}
}while(exit!='y'exit!='Y');
}
数据结构C语言
int LocateElem(Sqlist L,ElemType e)这是定义了一个函数(或者叫方法),int 是函数的返回值数据类型(整数型),LocateElem是函数名称,后面的括号里面是参数,有两个参数,Sqlist是自定义的顺序表数据结构类型(参数类型),L是第一个参数变量名,ElemType是顺序表单体数据结构类型,e是第二参数变量名。函数的作用就是在L中的elem顺序表中,查找等于e的元素,如果有就返回其在顺序表中的序号,没有返回0
数据结构c语言习题。编写一个函数以二叉查找树T和两个有序的关键字 k1,
// 创建二叉树的原数组数据: 40 20 60 10 30 50 70
// 前序遍历序列: 40 20 10 30 60 50 70
// 中序遍历序列: 10 20 30 40 50 60 70
// 后序遍历序列: 10 30 20 50 70 60 40
// 输入关键字k1,k2的数值: 30 50
// 打印的结果:
// 40 30 50
//
// 二叉树示意图:
//
// 40
// / \
// 20 60
// / \ / \
// 10 30 50 70
#include "stdio.h"
#include "stdlib.h"
struct Tree
{
int data;
struct Tree *left;
struct Tree *right;
};
typedef struct Tree TreeNode;
typedef TreeNode *Bitree;
Bitree insertNode(Bitree root,int data) //插入结点
{
Bitree newnode;
Bitree current;
Bitree back;
newnode=(Bitree)malloc(sizeof(TreeNode));
if(newnode==NULL)
{
printf("\n动态分配内存出错.\n");
exit(1);
}
newnode-data=data;
newnode-left=NULL;
newnode-right=NULL;
if(root==NULL)
{
return newnode;
}
else
{
current=root;
while(current!=NULL)
{
back=current;
if(current-data data)
current=current-left;
else
current=current-right;
}
if(back-data data)
back-left=newnode;
else
back-right=newnode;
}
return root;
}
Bitree createTree(int *data,int len) //创建二叉树(非递归)
{
Bitree root=NULL;
int i;
for(i=0;ilen;i++)
{
root=insertNode(root,data[i]);
}
return root;
}
void preOrder(Bitree ptr) //先序遍历(递归法)
{
if(ptr!=NULL)
{
printf("%d ",ptr-data);
preOrder(ptr-left);
preOrder(ptr-right);
}
}
void inOrder(Bitree ptr) //中序遍历(递归法)
{
if(ptr!=NULL)
{
inOrder(ptr-left);
printf("%d ",ptr-data);
inOrder(ptr-right);
}
}
void postOrder(Bitree ptr) //后序遍历(递归法)
{
if(ptr!=NULL)
{
postOrder(ptr-left);
postOrder(ptr-right);
printf("%d ",ptr-data);
}
}
//根据关键字k1和k2,进行区间查找(递归法)
void btreeSearch(Bitree ptr,int k1,int k2)
{
if(ptr!=NULL)
{
if(ptr-data k1 ptr-data k2)
{
btreeSearch(ptr-right,k1,k2);
}
else if(ptr-data == k1 ptr-data k2)
{
printf("%d ",ptr-data);
btreeSearch(ptr-right,k1,k2);
}
else if(ptr-data k1 ptr-data k2)
{
printf("%d ",ptr-data);
btreeSearch(ptr-left,k1,ptr-data);
btreeSearch(ptr-right,ptr-data,k2);
}
else if(ptr-data k1 ptr-data == k2)
{
printf("%d ",ptr-data);
btreeSearch(ptr-left,k1,k2);
}
else if(ptr-data k1 ptr-data k2)
{
btreeSearch(ptr-left,k1,k2);
}
else if(ptr-data == k1 ptr-data == k2)
{
printf("%d ",ptr-data);
}
else
{
printf("其它情况,当前节点的数值是%d",ptr-data);
}
}
}
int main()
{
Bitree T=NULL; //T是二叉查找树
int data[]={40,20,60,10,30,50,70};
int len;
int i;
int k1,k2; //关键字k1,k2
int tmp;
len=sizeof(data)/sizeof(int);
printf("创建二叉树的原数组数据: ");
for(i=0;ilen;i++)
{
printf("%d ",data[i]);
}
T=createTree(data,len); //创建二叉树
printf("\n前序遍历序列: ");
preOrder(T);
printf("\n中序遍历序列: ");
inOrder(T);
printf("\n后序遍历序列: ");
postOrder(T);
printf("\n输入关键字k1,k2的数值: ");
scanf("%d%d",k1,k2);
if(k1k2)
{
tmp=k1;
k1=k2;
k2=tmp;
}
//根据关键字k1和k2,进行区间查找(递归法)
btreeSearch(T,k1,k2);
printf("\n");
return 0;
}
网页标题:数据结构c语言查找函数,从一组数据中查找数据c语言
文章来源:http://myzitong.com/article/dsgspcg.html