搜档网
当前位置:搜档网 › 顺序表的基本操作

顺序表的基本操作

删除运算 DeleteList(L,i)

#include
#include
#define OK 1
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int last;
}Seqlist;


void InitList(Seqlist *L)
{
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
}


void CreatSeqList(Seqlist *L)
{
int i;

printf("创建顺序表,请输入5个表元素:");
L->last=0;
for(i=0;i<5;i++)
{
scanf("%d",&L->a[i]);
L->last++;
}
}
void OutputSeqList(Seqlist *L)
{
int i;
for( i=0;ilast;i++)
{
printf("%d ",L->a[i]);
}
}
int DeleteSeqList(Seqlist *L,int i)
{
int j;
if (i<1||i>L->last)
printf("Insert locate ERROR!");
else
{
for(j=i;j<=L->last;j++)
L->a[j-1]=L->a[j];

L->last--;
OutputSeqList(L);
}
return OK;
}
int main()
{
Seqlist L;

int i;
CreatSeqList( &L );
OutputSeqList( &L );
printf("请输入待删除的位置i:\n");
scanf("%d",&i);
DeleteSeqList( &L , i);

}

插入运算

int InsertSeqlist(Seqlist *L,int i,datatype x)


#include "stdio.h"
#include "malloc.h"
#define MAXSIZE 100
#define OK 1
typedef int datatype; //定义datatype的类型
typedef struct
{
datatype a[MAXSIZE];
int last;
}Seqlist; //定义一个结构体,名字就是Seqlist
void InitSeqlist(Seqlist *L) //初始化顺序表
{
L=(Seqlist *)malloc(sizeof(Seqlist)); //申请一块Seqlist类型的存储单元操作,并将其地址赋给变量L
L->last = -1;
}
void CreatSeqlist(Seqlist *L) //创建顺序表
{

int i;
L->last = 0;
printf("请输入5个数,创建顺序表:");
for(i = 0;i < 5;i++)
{
scanf("%d",&L->a[i]);
L->last++;
}
}

void OutputSeqlist(Seqlist *L) //输出顺序表
{
int i;
for(i = 0;i< L->last;i++)
printf("%d ",L->a[i]);
}

int InsertSeqlist(Seqlist *L,int i,datatype x) //把x插入到顺序表的i位置
{

int j;
if(L->last == MAXSIZE-1)
{
printf("表满\n");
return -1;
}
if(i<1 || i>L->last)
{
printf("位置错\n"); //检查插入位置的正确性
return 0;
}
{
for(j = L->last;j >= i-1;j--)
L->a[j+1] = L->a[j]; //结点后移
L->a[i-1] = x; //新元素插入
L->last++; //last仍然指向最后一个元素
OutputSeqlist(L);
}
return OK;
}

int main()
{
Seqlist L;
int i;
datatype x;
CreatSeqlist(&L);
OutputSeqlist(&L);
printf("\n请输入插入数的位置和值,i,x:");
scanf("%d %d",&i,&x);
InsertSeqlist(&L,i,x); //调用插入函数
}



#include


#include

#define MAXSIZE 100

#define N 6

typedef struct

{

int data [MAXSIZE];

int last;

}Seqlist;

void CreateSeqlist (Seqlist *L);

void OutSeqlist (Seqlist *L);

int LocationSeqlist (Seqlist *L , int x) // 在顺序表中查找x

{

int i = 0;

while (i <= L->last && L->data [i] != x)

i++;

if (i > L->last )

return -1;

else

return i;

}


int main (void)

{

int x , i;

Seqlist L;

CreateSeqlist (&L);

OutSeqlist (&L);

printf ("请输入查找的值x: \n");

scanf ("%d" , &x);

i = LocationSeqlist (&L , x);

printf ("%d is in data[%d]\n" , x , i);

return 0;

}

void CreateSeqlist (Seqlist *L)

{

int i;

L->last = 0;

printf ("请输入N个数创建顺序表: \n");

for (i = 0; i < N; i++)

{

scanf ("%d" , &L->data [i]);

L->last ++;

}

}

void OutSeqlist (Seqlist *L)

{

int i;

printf ("新建的顺序表是: \n");

for (i = 0; i < L->last ; i++)

printf ("%d " , L->data [i]);

printf ("\n");

}

例题2.1

#include "stdio.h"
#define N 7
void main()
{
int i,j;
int x,y;
int a[N];
printf("请输入7个数:");
for(i=0;i<7;i++)
scanf("%d",&a[i]);
x=a[0]; // 将基准置入x中
for(i=1;iif(a[i]{
y=a[i];
for(j=i-1;j>=0;j--) //后移
a[j+1]=a[j];
a[0]=y;
}
printf("排序后的结果是:");
for(i=0;iprintf("%d ",a[i]);
printf("\n");
}


例题2.2
有顺序表A和B,其元素均按从小到大的生序排列,编写一个算法将它们合并成一个顺序表C,
要求C的元素也是从大到小升序排列

#include "stdio.h"
#define M 6
#define N 4
#define Z 10
void main()
{
int i,j,k;
int a[M];
int b[N];
int c[Z];
printf("请输入a表的值:\n");
for(i=0;iscanf("%d",&a[i]);
printf("\n请输入b表的值:\n");
for(i=0;iscanf("%d",&b[i]);
i=0;j=0;k=0;
while(i
if(a[i]c[k++]=a[i++]; //比较a,b二个表中数据的大小,把较小的数据送给c表。
else
c[k++]=b[j++];
while(ic[k++]=a[i++];
while(jc[k++]=b[j++];

printf("\n新生成的c表是:\n");
for(i=0;iprintf("%d ",c[i]);
printf("\n");
}

例题 2.3

#include "stdio.h"
#define m 4
#define n 6
void main()
{
char a[m];
char b[n];
char as[m];
char bs[n];
int i,j;
int ms=0,ns=0;

printf("请输入一些字符生成a表:\n");
for(i=0;iscanf("%c",&a[i]);
printf("\n请输入一些字符生成b表:\n");
for(j=0;jscanf("%c",&b[j]);


i=0;
while(a[i]==b[i])
i++;
for(j=i;j

{
as[j-1]=a[j];
ms++;
}
for(j=i;j{
bs[j-1]=b[j];
ns++;
}
if(ms==ns&&ns==0)
printf("空表");
else if(ms==0&&ns>0 || ms>0&&ns>0&& as[0]printf("aelse
printf("a>b");

}


头部插入建立单链表(和书上稍有不同)


#include "stdio.h"
#include "malloc.h"
typedef struct node
{
int data;
struct node *next;
};
void main()
{

struct node *s,*H=NULL;
int x;
printf("请输入一些数:\n");
scanf("%d",&x);
while(x!=0)
{
s=(struct node*)malloc(sizeof(node));
s->data=x;
s->next=H;
H=s;
scanf("%d",&x);
}
printf(" \n*********生成的单链表是**********: \n");
while(H!=NULL)
{
printf(" %d ",H->data);
H=H->next;
}
printf("\n");
}


#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;//定义一个结构体,名字是Lnode,LinkList是指向Lnodede指针类型
void main()
{
LinkList L=NULL;//空表
Lnode *s;
int x;
printf("请输入一些数:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));//申请一个Lnode类型的存储单元,并将其地址赋给变量s.
s->data=x;
s->next=L;
L=s;
scanf("%d",&x);
}
printf(" \n*********生成的单链表是**********: \n");
while(L!=NULL)
{
printf(" %d ",L->data);//输出单链表
L=L->next;
}
printf("\n");
}



尾部插入建立单链表

#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;//定义一个结构体,名字是Lnode,LinkList是指向Lnodede指针类型
void main()
{
LinkList L=NULL;//空表
Lnode *s,*r=NULL;
int x;
printf("请输入一些数:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));//申请一个Lnode类型的存储单元,并将其地址赋给变量s
s->data=x;
if(L==NULL)
L=s; //第一个结点的处理
else
r->next=s; //其他结点的处理
r=s; //r指向新的尾结点
scanf("%d",&x);
}
printf(" \n*********生成的单链表是**********: \n");
if(r!=NULL)
r->next=NULL;

while(L!=NULL)
{
printf(" %d ",L->data); //输出单链表
L=L->next;
}
printf("\n");
}

求单链表的长度

#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *s,*r=NULL;
int x;
int count=0;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}

printf("\n***新建的单链表是***:\n");

r=L;
while(r!=NULL)
{
printf("%d ",r->data );
r=r->next;
count++;
}
printf("\n单链表的长度是%d\n",count);
}



按序号查找


#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *p,*s,*r=NULL;
int x;
int j=1,i;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}

printf("\n请输入i的值:\n");
scanf("%d",&i);
p=L;
while(p->next !=NULL&&j{

p=p->next;
j++;

}
if(j==i)
printf("第%d个结点的值是%d\n",i,p->data);
else
printf("NOT FOUND\n");


}


按值查找

#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *p,*s,*r=NULL;
int x;
int j=1,y;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}

printf("\n请输入y的值: ");
scanf("%d",&y);
p=L;
while(p->next !=NULL&&p->data!=y)
{

p=p->next;
j++;

}
if(p->next!=NULL)
printf("%d在单链表的%d位置\n",y,j);
else
printf("NOT FOUND\n");


}




插入结点(后插)

#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *p,*s,*r=NULL;
int x;
int j=1,locate;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}
printf("请输入待插的数的位置:");
scanf("%d",&locate);
p=L;
while(p->next !=NULL&&j!=locate)
{
p=p->next ;
j++;
}

if(p==NULL)
printf("插入位置错误:");
else
{
s=(Lnode*)malloc(sizeof(Lnode));
printf("请输入待插入数的值:");
scanf("%d",&s->data);
s->next =p->next ;
p->next =s;
}
p=L;
while(p!=NULL)
{
printf("%3d",p->data );
p=p->next ;
}
printf("\n");


}














































相关主题