数据结构实验(C语言):顺序表实验

数据结构实验(C语言):顺序表实验,第1张

//线性表函数 *** 作

#include <stdio.h>

#include <string.h>

#define MaxSize 30

#define Error 0

#define True 1

typedef char ElemType

typedef struct

{

ElemType elem[MaxSize]

int length

}SqList/*顺序表类型定义*/

void InitList(SqList * &L) /*初始化顺序表L*/

{

L = (SqList *)malloc(sizeof(SqList))

L ->length = 0

}

void DestroyList( SqList *L ) /*释放顺序表L*/

{

free(L)

}

int ListEmpty( SqList *L )/*判断顺序表L是否为空表*/

{

return( L ->length == 0)

}

int ListLength( SqList *L ) /*返回顺序表L的元素个数*/

{

return( L ->length)

}

void DispList( SqList *L )/*输出顺序表L*/

{

int i

if( ListEmpty(L))

return

for( i = 0i <L ->lengthi++ )

printf("%c", L ->elem[i])

printf("\n")

}

int GetElem( SqList *L, int i, ElemType &e) /*获取顺序表中的第i个元素*/

{

if( i <1 || i >L ->elem[i])

return Error

e = L ->elem[i - 1]

return True

}

int LocateElem( SqList *L, ElemType e) /*在顺序表中查找元素e*/

{

int i = 0

while( i <L ->length &&L ->elem[i] != e)

i++

if(i >= L ->length)

return Error

else

return i+1

}

int ListInsert( SqList * &L, int i, ElemType e) /*在顺序表L中第i个位置插入元素e*/

{

int j

if( i <1 || i >L ->length + 1)

return 0

i-- /*将顺序表位序转化为elem下标*/

for( j = L ->lengthj >ij--)/*将elem[i]及后面元素后移一个位置*/

L ->elem[j] = L ->elem[j - 1]

L ->elem[i] = e

L ->length++ /*顺序表长度增1*/

return True

}

int ListDelete( SqList * &L, int i, ElemType &e) /*顺序表L中删除第i个元素*/

{

int j

if( i <1 || i >L ->length)

return Error

i-- /*将顺序表位序转化为elem下标*/

e = L ->elem[i]

for(j = ij <L ->length - ij++)

L ->elem[j] = L ->elem[j + 1]

L ->length-- /*顺序表长度减1*/

return True

}

void main()

{

SqList *L

ElemType e

printf("(1)初始化顺序表L\n")

InitList(L)

printf("(2)依次采用尾插法插入a,b,c,d,e元素\n")

ListInsert(L, 1, 'a')

ListInsert(L, 2, 'b')

ListInsert(L, 3, 'c')

ListInsert(L, 4, 'd')

ListInsert(L, 5, 'e')

printf("(3)输出顺序表L:")

DispList(L)

printf("(4)顺序表L长度 = %d\n", ListLength(L))

printf("(5)顺序表L为%s\n", (ListEmpty(L) ?"空" :"非空"))

GetElem(L, 3, e)

printf("(6)顺序表L的第3个元素 = %c\n", e)

printf("(7)元素a的位置 = %d\n", LocateElem(L,'a'))

printf("(8)在第4个元素位置上插入f元素\n")

ListInsert(L, 4, 'f')

printf("(9)输出新的顺序表L:")

DispList(L)

printf("(10)删除L的第3个元素\n")

ListDelete(L, 3, e)

printf("(11)输出新的顺序表L:")

DispList(L)

printf("(12)释放顺序表L\n")

DestroyList(L)

}

#include <iostream>

#include <cmath>

using namespace std

 //为什么这里不能放在main中?

int main()

{

 double x1,y1,x2,y2

 cout<<"input (x1,y1)  and (x2,y2) :"

 cin>>x1>>y1>>x2>>y2

 double  distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))

 cout<<distance<<endl

 return 0

}

/*环境 microsoft visual c++ */

#include<stdio.h>

#include<stdlib.h>

#define OVERFLOW -2

#define ERROR 0

#define ok 1

#define NULL 0

typedef int status

typedef struct lnode

{

int data

struct lnode *next

}lnode,*linklist

void creat(linklist l,int n) //创建n个带头结点的链表

void travser(linklist l) //输出链表中的data。

status insert(linklist l,int i,int e) //在链表的第i个位置插入新的数据e。

status sort(linklist l) //排序。

int getlength(linklist l) //得到链表的长度。

int listdelete(linklist &l,int i) //在带头结点的单链表l中,删除第i个元素,并返回其值。

void main()

{

linklist l

int i,e,n,length,m

l=(linklist)malloc(sizeof(lnode))

printf("now we should creat a list\nhow many numbers you want to input:")

scanf("%d",&n)

creat(l,n)

travser(l)

while(1){

printf("please choose which function do you need\n0:exit,\n1sort,:\n2:insert,\n3:travser\n4:getlength,\n5:listDelete")

scanf("%d",&m)

/// 0:退出循环,1:排序,2:插入节点,3:显示输出,4:得到链表长度。

switch(m)

{

case 5:printf("what position do you want to delete:")

scanf("%d",&i)

listdelete(l,i)break

case 4:length=getlength(l)

printf("length=%d\n",length)break

case 3:travser(l)break

case 2:printf("please input the number you want to insert:")

scanf("%d",&e)

printf("what position you want to insert:")

scanf("%d",&i)

insert(l,i,e)

travser(l)break

case 1:printf("now will sort:\n")

sort(l)

travser(l)break

case 0:exit(0)break

default:break

}

}

}

void creat(linklist l,int n)

{

int i

linklist p

l->next=NULL

l->data=n

for(i=ni>0i--)

{

p=(linklist)malloc(sizeof(lnode))

printf("please input number:")

scanf("%d",&(p->data))

p->next=l->next

l->next=p

}

}

void travser(linklist l)

{

linklist p

printf("there are %d numbers in list\n",l->data)

p=l->next

printf("list:\n")

while(p)

{

printf("%d ",p->data)

p=p->next

}

printf("\n")

}

status insert(linklist l,int i,int e)

{

int n

linklist s,p

if(i>l->data+1||i<1) return ERROR

s=(linklist)malloc(sizeof(lnode))

s->data=e

p=l

n=0

while(n<i-1)

{

p=p->next

n++

}

s->next=p->next

p->next=s

l->data++

return ok

}

status sort(linklist l)

{

int temp

linklist p,q,r

p=q=r=l

if(p==NULL||p->next==NULL) return ok

for(p=l->nextp->next!=NULLp=p->next)

{

r=p

for(q=p->nextq!=NULLq=q->next)

if(r->data>q->data) r=q

if(r!=p)

{

temp=r->data

r->data=p->data

p->data=temp

}

}

return ok

}

int getlength(linklist l)

{linklist p

int i=0

p=l->next

while(p)

{i++

p=p->next

}

return i

}

int listdelete(linklist &l,int i)

{

int e,j=0

linklist p,q

p=l

while(p->next &&j<i-1)

{

p=p->next

++j

}

if(!p->next ||j>i-1) return ERROR

q=p->next

p->next =q->next

e=q->data

free(q)

return e

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11768208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存