数据结构实验:线性表(1)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构实验:线性表(1)相关的知识,希望对你有一定的参考价值。

要求:
1.顺序结构实现实现线性表的所有方法
2.在main方法中调用线性表的各个方法,并显示调用结果,其中:
typedef struct Student
char name[10];
int age;
Student;

typedef int Status;
typedef Student ElemType;//也可以选择别的有意义的数据

typedef struct LNode
ElemType data;
struct LNode *next;
LNode, *LinkList;

参考技术A /*2.1创建空顺序表*/
PSeqList createNullList_seq(int m)

PSeqList palist =(PSeqList)malloc(sizeof(struct SeqList));
if (palist!=NULL)

palist->element=(DataType*)malloc(sizeof(DataType)*m);
if (palist->element)

palist->MAXNUM=m;
palist->n=0;
return palist;

else free (palist);

printf("Out of space!! \n");
return NULL;


/*2.2判断线性表是否为空*/
int isNullList_seq(PSeqList palist)

return(palist->n==0);


/*2.3顺序表删除*/
int deleteP_seq(PSeqList palist,int p)

int q;
if(p<0 || p>palist->n-1)

printf("Not exist!\n");
return 0;

for (q=p;q<palist->n-1;q++)
palist->element[q]=palist->element [q+1];
palist->n=palist->n-1;
return 1;


/*2.4在顺序表中求某元素的下标*/
int locate_seq(PSeqList palist,DataType X)

int q;
for (q=0;q<palist->n;q++)
if(palist->element[q]==X)return q;
return -1;


/*2.5顺序表的前插入*/
int insertPre_seq(PSeqList palist,int p,DataType X)

int q;
if(palist->n >=palist->MAXNUM)

printf("Overflow! \n");
return 0;

if(p<0 || p>palist->n)

printf("Not exist! \n");
return 0;

for(q=palist->n-1;q>=p;q--)
palist ->element[q+1]=palist ->element[q];
palist->element[p]=X;
palist->n=palist ->n+1;
return 1;


//2.6遍历palist所指所有元素的值
void print_seq(PSeqList palist)

int i;
if(palist != NULL)
for(i=0;i<palist->n;i++)
printf("out of element:%d\n",palist->element[i]);
printf("\n\n");


//2.7线性表排序
void sort_seq(PSeqList palist)

int i,j;
DataType x;
for(i=1;i<palist->n;i++)

x=palist->element[i];
for(j=i-1;j>=0;j--)
if(x<palist->element[j])
palist->element[j+1]=palist->element[j];
else
break;
palist->element[j+1]=x;


/*2.8顺序表的后插*/
int insertPost_seq(PSeqList palist,int p,DataType X)

int q;
if(palist->n >=palist->MAXNUM)

printf("Overflow! \n");
return 0;

if(p<0 || p>palist->n)

printf("Not exist! \n");
return 0;

for(q=palist->n-1;q>p;q--)
palist ->element[q+1]=palist ->element[q];
palist->element[p+1]=X;
palist->n=palist ->n+1;
return 1;

/*2.9尾插*/
int insertRear(PSeqList palist,DataType x)

if(palist->n==palist->MAXNUM)

printf("\n List overflow!");
return(0);

palist->element[palist->n]=x;
palist->n++;
return(1);

/*2.10头插*/
int insertHead(PSeqList palist,DataType x)

int q;
if(palist->n==palist->MAXNUM)

printf("\n List overflow!");
return(0);

for(q=palist->n-1;q>=0;q--)
palist ->element[q+1]=palist ->element[q];
palist->element[0]=x;
palist->n++;
return(1);

/*2.11头删*/
int deleteHead(PSeqList palist)

int q;
for (q=0;q<palist->n-1;q++)
palist->element[q]=palist->element [q+1];
palist->n=palist->n-1;
return 1;


/*2.12尾删*/
int deleteRear(PSeqList palist)

palist->n--;
return(1);
参考技术B #include<stdio.h>
#define ERROR 0
#define OVERFLOW -2
#define LIST_SIZE 20
typedef int ElemType;

typedef struct List

ElemType elem[LIST_SIZE];
int length;
SqList;

int ListInsert(SqList *L,int i,ElemType e)

int j;
if(i<0||i>L->length+1)
return ERROR;
if(L->length>=LIST_SIZE)
return OVERFLOW;
for(j=L->length-1;j>=i-1;j--)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;
++L->length;


void Union(SqList *La,SqList Lb)
int i,j;
ElemType e1,e2;
for(j=1;j<=Lb.length;j++)
e2=Lb.elem[j-1];<br/> for(i=1;i<=La->length;i++)<br/> e1=La->elem[i-1];<br/> if(e1==e2)<br/> break;<br/>
if(i==La->length+1)
ListInsert(La,La->length+1,e2);




void MergeList(SqList La,SqList Lb,SqList *Lc)

int i=1,j=1,k=0;
while(i<=La.length&&j<=Lb.length)

if(La.elem[i-1]<=Lb.elem[j-1])

ListInsert(Lc,++k,La.elem[i-1]);
++i;

else

ListInsert(Lc,++k,Lb.elem[j-1]);
++j;


while(i<=La.length)

ListInsert(Lc,++k,La.elem[i-1]);
i++;

while(j<=Lb.length)

ListInsert(Lc,++k,Lb.elem[j-1]);
j++;

Lc->length=k;


void print(SqList L)

int i;
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");


void main()

SqList La,Lb,Lc;
int j;
ElemType e;
La.length=0;
for(j=1;j<=5;j++)
La.elem[j-1]=j;<br/> La.length++;
/* clrscr(); */
printf("La= ");
print(La);
Lb.length=0;
for(j=1;j<=5;j++)
Lb.elem[j-1]=j*2;<br/> Lb.length++;
printf("Lb= ");
print(Lb);
Union(&La,Lb);
printf("new La= ");
print(La);
Lc.length=0;
MergeList(La,Lb,&Lc);
printf("Lc= ");
print(Lc);


这是链表的基本用法 希望能帮助你 其他 的自己加进去。。
参考技术C http://download.csdn.net/user/zxz414644665/all/1到这个地址去看看,我把它传上去了,应该是你要的东西

SDUT 3379 数据结构实验之查找七:线性之哈希表

数据结构实验之查找七:线性之哈希表

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

根据给定的一系列整数关键字和素数p,用除留余数法定义hash函数H(Key)=Key%p,将关键字映射到长度为p的哈希表中,用线性探测法解决冲突。重复关键字放在hash表中的同一位置。

Input

连续输入多组数据,每组输入数据第一行为两个正整数N(N <= 1000)和p(p >= N的最小素数),N是关键字总数,p是hash表长度,第2行给出N个正整数关键字,数字间以空格间隔。

Output

输出每个关键字在hash表中的位置,以空格间隔。注意最后一个数字后面不要有空格。

Example Input

5 5
21 21 21 21 21
4 5
24 15 61 88
4 5
24 39 61 15
5 5
24 39 61 15 39

Example Output

1 1 1 1 1
4 0 1 3
4 0 1 2
4 0 1 2 0

DQE:

水题233

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int n,p;
 5 
 6 int insert(int *f,int k)
 7 {
 8     int h=k%p;
 9     int i=1,j=h;
10     while(f[j]!=0&&f[j]!=k)
11         j=(h+i++)%p;
12     f[j]=k;
13     return j;
14 }
15 
16 int main()
17 {
18     while(scanf("%d %d",&n,&p)!=EOF)
19     {
20         int hash[2011]={0};
21         int i;
22         for(i=0;i<n;i++)
23         {
24             int k;
25             scanf("%d",&k);
26             printf("%d%c",insert(hash,k),i==n-1?\n: );
27         }
28     }
29     return 0;
30 }
31 
32 /***************************************************
33 User name: ***
34 Result: Accepted
35 Take time: 0ms
36 Take Memory: 156KB
37 Submit time: 2016-12-03 13:12:56
38 ****************************************************/

以上是关于数据结构实验:线性表(1)的主要内容,如果未能解决你的问题,请参考以下文章

《数据结构》实验二:线性表实验(顺序表)

数据结构实验:线性表的顺序表示和链式表示及插入、删除、查找运算

数据结构实验 —— 线性表

数据结构-线性表自然连接-应用实验

第二篇 线性数据结构的编程实验 第7章 应用线性表排序编程

数据结构实验报告-实验一 顺序表单链表基本操作的实现