数据结构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://ybzwz.com/article/dsgspcg.html