网站建设资讯

NEWS

网站建设资讯

顺序表主函数C语言 顺序表主函数c语言是什么

C语言数据结构顺序表选择排序怎么在主函数中调用,谢谢!

SeqList L;//L只是个默认构造,在后面执行基本是统一的0值;执行前应该设置实体数据

创新互联建站主要从事成都做网站、成都网站建设、成都外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务张家港,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

L=Selection(L.length);//改为L=Selection(L);原函数调用与函数定义不符,有语法错误;L.length是个int 类型,函数定义的参数类型是SeqList;

SeqList Selection(SeqList L) 内部逻辑不够简捷,多多练习;

if (L.data[j]L.data [i]){}//可直接交换,k标志没什么作用。

数据结构顺序表的c语言代码实现,主函数测试时插入和删除操作不能得到预期结果

你的代码中的插入和删除操作根本就无法实现,应为函数无法修改main()函数中传入的实参变量的,把形参改成指针才行

代码改成如下:

#include stdio.h

#define Maxsize 50

#define FALSE 0

#define TRUE 1

typedef int ElemType;

typedef int Status;

typedef struct{

ElemType data[Maxsize];

int length;

}SqList;

Status LocateElem(SqList L,int e){//按值查找

int i;

if(L.length==0)

return FALSE;

for(i=0;iL.length;i++){

if(L.data[i]==e)

return i+1;

}

return FALSE;

}

Status Insert(SqList *L,int i,int e){//插入操作 //修改成指针

int j;

if(L-length==Maxsize) //把 .改成 -

return FALSE;

if(i1||iL-length+1)

return FALSE;

for(j=L-length-1;j=i-1;j--) //把 .改成 -

L-data[j+1]=L-data[j];//把 .改成 -

L-data[i-1]=e;//把 .改成 -

L-length++;//把 .改成 -

return TRUE ;

}

Status Delete(SqList * L,int i){//删除操作 //修改成指针

int j;

if(L-length==0)//把 .改成 -

return FALSE;

for(j=i;jL-length;j++){//把 .改成 -

L-data[j-1]=L-data[j];//把 .改成 -

}

L-length--;//把 .改成 -

return TRUE;

}

SqList CreateList(SqList L){

int i;

L.length=30;

for(i=0;iL.length;i++){

L.data[i]=i+1;

}

return L;

}

void printSqList(SqList L){

int i;

for(i=0;iL.length;i++){

printf("顺序表第%d个元素值为%d\n",i+1,L.data[i]);

}

printf("\n\n");

}

void main(){

int k;

int e;        //待查元素

int insertData;//待插元素

int insert_location,delete_location;//插入位置及删除位置

int isInserted,isDeleted;//判断是否插入或删除成功

SqList L=CreateList(L);

printSqList(L);

printf("请输入您要查找的值:");

scanf("%d",e);

k=LocateElem(L,e);

printf("您要查找的值在顺序表第%d个\n",k);

printf("\n\n");

printf("请输入您要插入的位置:");

scanf("%d",insert_location);

printf("\n");

printf("请输入您要插入的值:");

scanf("%d",insertData);

isInserted=Insert(L,insert_location,insertData);

if(isInserted){

printf("%d",L.data[insert_location-1]);

}

printf("\n\n");

printf("请输入您要删除的位置:");

scanf("%d",delete_location);

printf("\n");

isDeleted=Delete(L,delete_location);

if(isDeleted){

printf("\n");

printSqList(L);

}

}

如果是C++可以把函数变成引用,那更简单

求用C语言写这个顺序表的主函数

完整代码:

#include stdio.h

#include stdlib.h

#include windows.h

#define MAXSIZE 100

typedef int datatype;

typedef struct{

datatype a[MAXSIZE];

int size;

}sequence_list;

void init(sequence_list *slt)

{

slt-size=0;

}

void append(sequence_list *slt,datatype x)

{

if(slt-size==MAXSIZE)

{

  printf("顺序表是满的");

exit(1);

}

slt-a[slt-size]=x;

slt-size=slt-size+1;

}

void display (sequence_list slt)

{

int i;

if(!slt.size)

printf("顺序表是空的");

else

for(i=0;islt.size;i++)

printf("%5d",slt.a[i]);

printf("\n");

}

int empty (sequence_list *slt)

{

memset(slt,0,sizeof(sequence_list));

return(slt-size==0?1:0);

}

int find (sequence_list slt,datatype x)

{

int i=0;

while(islt.size slt.a[i]!=x)

i++;

return(islt.size ? i:-1);

}

datatype get(sequence_list slt,int i)

{

if(i0||i=slt.size)

{

printf("\n指定位置的节点不存在");

exit(1);

}

else

  return slt.a[i];

}

void insert(sequence_list *slt,datatype x,int position)

{

int i;

if(slt-size==MAXSIZE)

{

printf("\n顺序表是满的,无法插入");

exit(1);

}

if(position0||positionslt-size)

{

printf("\n指定的插入位置不存在");

exit(1);

}

for(i=slt-size;iposition;i--)

slt-a[i]=slt-a[i-1];

slt-a[position]=x;

slt-size++;

}

void dele(sequence_list *slt,int position)

{

int i;

if(slt-size==0)

{

printf("\n顺序表是空的,无法删除");

exit(1);

}

if(position0||position=slt-size)

{

printf("\n指定的删除位置不存在");

exit(1);

}

for(i=position;islt-size-1;i++)

  slt-a[i]=slt-a[i+1];

  slt-size--;

}

int main()

{

sequence_list slt;

bool exit_flag=false;

int fun_num=1;

datatype data=0;

int i=0;

printf("1.初始化  2.增加节点  3.显示  4.清空  5.查找\n6.获取节点 7.插入节点  8.删除节点  9.退出  0.清屏\n");

while (!exit_flag)

{

printf("请选择功能:\n");

scanf("%d",fun_num);

switch (fun_num)

{

case 1:

init(slt);

break;

case 2:

printf("请输入数据:\n");

scanf("%d",data);

append(slt,data);

break;

case 3:

display (slt);

break;

case 4:

empty (slt);

break;

case 5:

printf("请输入查找的数据:\n");

scanf("%d",data);

printf("查找到的数据位置为:%d",find (slt,data));

printf("\n");

break;

case 6:

printf("请输入数据位置:\n");

scanf("%d",i);

printf("该位置的数据为:%d",get(slt,i));

printf("\n");

break;

case 7:

printf("请输入插入节点位置:\n");

scanf("%d",i);

printf("请输入插入节点数据:\n");

scanf("%d",data);

insert(slt,data,i);

break;

case 8:

printf("请输入删除节点位置:\n");

scanf("%d",i);

dele(slt,i);

break;

case 9:

exit_flag=true;

break;

case 0:

system("CLS");

printf("1.初始化  2.增加节点  3.显示  4.清空  5.查找\n6.获取节点 7.插入节点  8.删除节点  9.退出  0.清屏\n");

break;

default:

break;

}

}

return 0;

}

效果如下图,调试通过,所有功能好使

C语言顺序表的基本操作

#include stdio.h

#include stdlib.h

typedef int DataType; // 定义数据数据类型

typedef struct {

DataType *data;   // data指向数据区的首个数据

int length;       // 数据长度

}SqList;

void Sort(SqList *L) {

int i,j,k;

DataType tmp;

for(i = 0; i  L-length - 1; ++i) {

k = i;

for(j = i + 1; j  L-length; ++j)

if(L-data[k]  L-data[j])

k = j;

if(k != i) {

tmp = L-data[k];

L-data[k] = L-data[i];

L-data[i] = tmp;

}

}

}

SqList *CreateList(DataType a[],int n) {

int i;

SqList *L;

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

L-data = (DataType *)malloc(n * sizeof(DataType));

L-length = n;

for(i = 0; i  n; ++i) L-data[i] = a[i];

Sort(L);

return L;

}

int InsertList(SqList *L,DataType x) {

int i,j;

for (i = 0;i  L-length;i++) {

if(x = L-data[i]) {

for(j = L-length;j = i;j--)

L-data[j + 1] = L-data[j]; // 结点后移

L-data[i] = x;

L-length++;

return 1;

}

}

L-data[L-length++] = x;

return 1;

}

int RemoveListElem(SqList *L,DataType d) {

int i,j;

for(i = 0; i  L-length; ++i) {

if(L-data[i] == d) {

for(j = i; j  L-length - 1; ++j)

L-data[j] = L-data[j + 1];

L-length--;

return 1;

}

}

return 0;

}

SqList *AndList(SqList *A, SqList *B) {   /* A∩B */

int i,j,k = 0;

int len = (A-length  B-length) ? B-length : A-length;

SqList *C = (SqList *)malloc(sizeof(SqList));

C-length = len;

C-data = (DataType *)malloc(len * sizeof(DataType));

for(i = 0; i  A-length; ++i) {

for(j = 0; j  B-length; ++j) {

if(A-data[i] == B-data[j]) {

C-data[k++] = A-data[i];

break;

}

}

}

C-length = k;

return C;

}

SqList *OrList(SqList *A, SqList *B) {   /* A∪B */

int i,j,flag;

DataType e;

SqList *C = (SqList *)malloc(sizeof(SqList));

C-length = A-length + B-length;

C-data = (DataType *)malloc(C-length * sizeof(DataType));

for(i = 0; i  A-length; ++i) C-data[i] = A-data[i];

for(i = 0; i  B-length; ++i) {

e = B-data[i];

flag = 1;

for(j = 0; j  C-length; ++j) {

if(e == C-data[j]) {

flag = 0;

break;

}

}

if(flag) InsertList(C,e);

}

return C;

}

void PrintList(SqList *L) {

int i;

for(i = 0; i  L-length; ++i)

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

printf("\n");

}

void FreeList(SqList *L) {

free(L-data);

free(L);

}

void main() {

DataType x;

DataType arra[] = {36,24,31,5,90,65,70,39,37};

DataType arrb[] = {9,8,43,51,37,89,33,46,29,80,56};

int alen = sizeof(arra)/sizeof(arra[0]);

int blen = sizeof(arrb)/sizeof(arrb[0]);

SqList *A = CreateList(arra,alen);

printf("A线性表为: ");

PrintList(A);

SqList *B = CreateList(arrb,blen);

printf("B线性表为: ");

PrintList(B);

SqList *C = AndList(A,B);

SqList *D = OrList(A,B);

printf(" C = A∩B: ");

PrintList(C);

printf(" D = A∪B: ");

PrintList(D);

printf("在D表中插入数据 : ");

scanf("%d",x);

InsertList(D,x);

printf("D表插入x后 :");

PrintList(D);

printf("删除D表中数据 : ");

scanf("%d",x);

RemoveListElem(D,x);

printf("删除x后的D表为 :");

PrintList(D);

FreeList(A);

FreeList(B);

FreeList(C);

FreeList(D);

}


本文题目:顺序表主函数C语言 顺序表主函数c语言是什么
转载来于:http://njwzjz.com/article/ddsddjh.html