重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

顺序表c语言输入函数 c语言输出顺序表

顺序表和链表的基本操作,用C语言实现!

顺序存储的线性表的算法

桐庐网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。

#include "stdio.h"

#include "stdlib.h"

#define Status int

#define OVERFLOW 0

#define TRUE 1

#define FALSE 0

#define OK 1

#define MAXSIZE 100

typedef int ElemType;

typedef struct list

{ElemType elem[MAXSIZE];

int length;

}SqList;

void InitList(SqList L){

L.length=0;

}

/*建立顺序表*/

void CreateList(SqList L)

{

int i;

printf("input the length");

scanf("%d",L.length);//输入表长

for(i=1;i=L.length;i++)

scanf("%d",L.elem[i-1]);//输入元素

}

//顺序表的遍历

void printdata(ElemType e){

printf("%4d",e);

}

void Traverse(SqList L,void (*visit)(ElemType e))

{ int i;

printf("The elements of the lists are:\n");

for(i=1;i=L.length;i++){

if (i%10==0)printf("\n");//每行显示10个元素

visit(L.elem[i-1]);//输出表中元素

}

printf("\n");

}

//有序顺序表L中插入元素e使序列仍有序

void Insert(SqList L,ElemType e)

{int i,j;

if (L.length==MAXSIZE)exit(OVERFLOW);//表满,不能插入

for(i=1;i=L.lengthL.elem[i-1]=e;i++);//向后查找

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

L.elem[j]=L.elem[j-1];//元素后移

L.elem[i-1]=e;//插入e

L.length=L.length+1;//表长加1

}

//建立递增有序的顺序表

void CreateList_Sorted(SqList L)

{int i,num;

ElemType e;

L.length=0;

printf("Create a sorted list,Input the length of the list\n");

scanf("%d",num);

printf("Input the data %d numbers\n",num);

for(i=1;i=num;i++){

scanf("%d",e);

Insert(L,e);

}

}

/*Merge two sorted lists*/

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

{int *pa,*pb,*pc;

if (La.length+Lb.lengthMAXSIZE) exit(OVERFLOW);

else

{pa=La.elem;pb=Lb.elem;pc=Lc.elem;

while (paLa.elem+La.lengthpbLb.elem+Lb.length)

*pc++=(*pa=*pb)?*pa++:*pb++;/*公共部分合并*/

while (paLa.elem+La.length) *pc++=*pa++;

/*R1表的剩余部分放到R的后部*/

while (pbLb.elem+Lb.length) *pc++=*pb++;

/*R2表的剩余部分放到R的后部*/

Lc.length=La.length+Lb.length;/*R表长*/

}

}

//判断元素是否对称,对称返回TRUE 否则返回FALSE

Status Symmetric(SqList L)

{int low,high;

low=0;

high=L.length-1;

while(lowhigh)

if (L.elem[low]==L.elem[high]){low++;high--;}

else return(FALSE); return(TRUE); }

//顺序表的主函数部分

//#include "seqlist.h"

void main()

{SqList L1,L2,L;

int select;

ElemType e;

do{printf("\n1 insert 2 merge");

printf("\n3 symmetric 0 exit \n");

printf("Please select(0--3)\n");

scanf("%d",select);

switch(select){

case 1:

InitList(L);

CreateList_Sorted(L);

Traverse(L,printdata);

printf("\nInput the element of inserted\n");

scanf("%d",e);

Insert(L,e);

Traverse(L,printdata);

break;

case 2:

InitList(L1);

CreateList_Sorted(L1);

Traverse(L1,printdata);

InitList(L2);

CreateList_Sorted(L2);

Traverse(L2,printdata);

InitList(L);

MergeList(L1,L2,L);

Traverse(L,printdata);

break;

case 3:

InitList(L);

CreateList(L);

Traverse(L,printdata);

if (Symmetric(L)) printf("Yes!\n"); else printf("Not\n");

break;

case 0:break;

default:printf("Error! Try again!\n");

}

}while(select);

}

/*单向链表的有关操作示例*/

/*类型定义及头文件部分,文件名为sllink.h*/

#include stdio.h

#include stdlib.h

typedef int ElemType;//元素实际类型

typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode,*LinkList; //定义结点、指针类型名

//头插法建立无序链表

void CreateList(LinkList L){

LinkList p;

ElemType e;

L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

printf("头插法建立链表,以0结束\n");

scanf("%d",e);

while(e){

p=(LinkList)malloc(sizeof(LNode));

p-data=e;

p-next=L-next;

L-next=p;

scanf("%d",e);

}

}

/*非递减有序单向链表L插入元素e序列仍有序*/

void Insert_Sort(LinkList L,ElemType e){

LinkList p,s;

s=(LinkList)malloc(sizeof(LNode));

s-data=e;

p=L;

while(p-nextp-next-data=e)

p=p-next;/*查找插入位置*/

s-next=p-next; /*插入语句*p结点后插入*s结点*/

p-next=s;

}

/*建立递增有序的单向链表*/

void Create_Sort(LinkList L){

ElemType e;

L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

printf("建立有序表,输入任意个整型数据以0结束\n");

scanf("%d",e);

while(e){

Insert_Sort(L,e);

scanf("%d",e);

}

}

/*单向链表的遍历*/

void Traverse(LinkList L){

LinkList p;

printf("遍历链表");

for(p=L-next;p;p=p-next)

printf("%5d",p-data);

printf("\n");

}

/*在单向链表删除元素e*/

void Delete(LinkList L,ElemType e){

LinkList p,q;

p=L;

q=L-next;

while(q q-data!=e){//查找元素的删除位置

p=q;

q=q-next;

}

if(!q) printf("\nnot deleted");/*未找到元素e*/

else {p-next=q-next;/*找到删除*/

free(q);}

}

/*单向链表的逆置*/

void exch(LinkList L){

LinkList p,s;

p=L-next;

L-next=NULL;

while(p){

s=p;

p=p-next;

s-next=L-next;

L-next=s;

}

}

/*两个非递减有序单向链表合并后仍为非递减序列*/

void MergeIncrease(LinkList La,LinkList Lb,LinkList Lc){

LinkList p,q,s,rear;

p=La-next;

q=Lb-next;

Lc=rear=La;

free(Lb);

while(pq){

if (p-dataq-data) {s=p;p=p-next; }

else {s=q;q=q-next; }

rear-next=s;/*较小元素插入表尾*/

rear=rear-next;

}

if (p) rear-next=p; else rear-next=q;

}

/*主函数部分,文件名为sllink.c*/

//#include "sllink.h"

void main(){

LinkList La,Lb,Lc;

ElemType e;

int select;

do{

printf(" 1 建立无序表,再删除指定元素\n");

printf(" 2 建立递增有序表,再逆置\n");

printf(" 3 建立两个递增有序表,将它们和并为一个仍递增表\n");

printf(" 0 退出,请输入选项(0-3)\n");

scanf("%d",select);

switch(select){

case 0:

break;

case 1:

CreateList(La);

Traverse(La);

printf("输入需删除的元素\n");

scanf("%d",e);

Delete(La,e);

Traverse(La);

break;

case 2:

Create_Sort(La);

Traverse(La);

exch(La);

printf("The list that is exchaged\n");

Traverse(La);

break;

case 3:

Create_Sort(La);Traverse(La);

Create_Sort(Lb);Traverse(Lb);

MergeIncrease(La,Lb,Lc);Traverse(Lc);

break;

default:

printf("输入选项错误,请重新输入!\n");

}

}while(select);

}

这些内容不知道能不能帮助到你。

用C语言建立一个顺序表,输入n个数并输出。程序编译没错,但运行不了,求指教。程序如下:

楼主你好

修改如下:

#includestdio.h

#includemalloc.h

#define MaxSize 40 //顺序表存储空间的初始分配量 -- (1)可以将MaxSize调大点儿

typedef struct

{

int *p;

int data[MaxSize];

int length;

int listsize;

}SeqList;

void InitList(SeqList x) //定义顺序表的初始化函数

//-- (2)这里应该是SeqList x 需要址传递 值传递是不会改变实参值的

{

x.p=(int*)malloc(MaxSize*sizeof(int));

if(!x.p) printf("存储分配失败!");

x.length=0;

x.listsize=MaxSize;

}

int main()

{

SeqList L;

InitList(L);

int i,n,k;

printf("请输入顺序表的长度n:");

scanf("%d",n);

if(n=0)

{

printf("数据错误!\n");

return 0;

}

if(nMaxSize)

{

L.p=(int*)realloc(L.p,n*sizeof(int));

if(!L.p)printf("存储空间扩展失败!\n");

L.listsize=n;

}

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

for(i=0;i=n-1;i++)

{

scanf("%d",k);

L.data[i]=k;

L.length++;

}

printf("线性表为:");

for(i=0;i=n-1;i++)

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

printf("\n");

return 1;

}

请看注释(1)(2)

希望能帮助你哈^_^

用C语言实现顺序表的输入输出,哪位大神帮忙检查下,输出不对

#include stdio.h

#include stdlib.h

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define LIST_INIT_SIZE 100

#define LISTINCREMENT  10

typedef int Status;

typedef int ElemType;

typedef struct {

ElemType *elem;

size_t length;

size_t maxsize;

// int data;

}SqList;

//对表初始化 

SqList *InitList() {

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

L-elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));

if(! L-elem)  exit(OVERFLOW);     //分配空间失败

L-length = 0;                     //空表长度为0

L-maxsize = LIST_INIT_SIZE;      //初始存储容量

return L;

}//InitList_Sq

//建立新表 

void Buid(SqList *L) {

ElemType *newbase,data;

printf("输入元素:");

scanf("%d",data);

if(L-length = L-maxsize) { //存储空间已满,增加分配

newbase = (ElemType *)realloc(L-elem,(L-maxsize+LISTINCREMENT)*sizeof(ElemType));

if(!newbase) exit(OVERFLOW);//存储分配失败

free(L-elem);

L-elem = newbase;       //新基址

L-maxsize += LISTINCREMENT; //增加存储容量

}

L-elem[L-length] = data;

++L-length;

}

//输出表

void  output(SqList *L) {

size_t i;

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

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

printf("\n");

}

//主函数 

int main() {

SqList *L = InitList();

Buid(L);

output(L);

return 0;

}

c语言顺序表的输入函数

建立方法很多,线性表是顺序表的顺序存储结构,这里我给你写个简单的例子参考一下,只要理解了,怎么写都不会错:具体代码如下: #include typedef struct{ int data[100]; int length; }Seqlist;//定义Seq这个新的数据类型 void creat(Seqlist L);//建立线性表 void show(Seqlist L);//显示线性表 int main() { Seqlist L; L.length=0;//初始化线性表的长度为0 creat(L); show(L); return 0; } void creat(Seqlist L) { int a; printf("请输入要创建的元素的个数:\t"); scanf("%d",a); for(int i=0;i

怎样用c语言实现用顺序表完成输入一串字符,在插入,计算长度,删除计算长度,最后输出,拜托拜托=v=

#include stdio.h

#include string.h

#include stdlib.h

#define maxsize 100

typedef char elepmtype;

typedef struct sequlist

{

elepmtype data[maxsize];

int num;

//int length;   //和num的功能不是一样的么

}SeqList,*LinkList;

void ListInitiate(LinkList *L)  //利用二级指针,初始化顺序表,你这里是想模仿我的那个二级指针方法吗?

(*L)=(LinkList)malloc(sizeof(SeqList));

(*L)-num=0;                   //初始化为0

void InputSeqList(SeqList *L)   //跟人家借一个输入函数

{

char str[maxsize];     

printf("输入字符串:");

gets(str);         

for(int i=0;str[i]!='\0';i++){   //这个地方用'\0'字符就好了,因为字符数组或者字符串的结束符都是\0

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

L-num++;

}

}

int InsertList( SeqList *L,int i,elepmtype x)/*i取值从0到maxsize-1*/

int j;

if(i0||iL-num+1)

{ printf("error\n");return(0);}/*检查插入位置的合理性*/

if((L-num==maxsize-1))/*表满则不能插入*/ 

{printf("插入位置错\n");return(0);}

for(j=L-num;j=i;j--)/*结点后移,为插入腾出空间*/

L-data[j+1]=L-data[j];             //这里应该是L-data  不是 List,而且向后移动数据的话

L-data[i]=x;       //新元素插入

L-num++;      /*调整last指向最后元素*/

return(1);/*成功返回1*/

}

//删除函数

int ListDelete(SeqList *L,int i,  elepmtype *x)   //这是不是分号 是逗号

int j;

if(L-num0)

{

printf("\n the list is empty!");

return 0;          

}

else if (i0||iL-num)      //掉了一个

printf("\n the position is invialid");

return 0;

}

else 

{

*x=L-data[i];                //这里记录了x的值

for (j=i+1;j=L-num;j++){

L-data[j-1]=L-data[j];         //改成这样看着比较舒服

}

L-num--;

}

return 1;

}

int ListLength(SeqList *L)     //这里怎么多了一个分号

{

return L-num;

//int i;

//i=0;

//for(i=0;i=n;i++)

//return(i);    //return只会执行一次。

}

void OutputSeqList(SeqList *L) 

{

if(0==L-num)    //你定义的是num啊,怎么又写成了last,代码乱入啊

return;

for(int i = 0;i L-num;i++){

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

}

printf("\n"); 

printf("字符串有%d个字符\n",ListLength(L)); //你的函数的名字是ListLength,不是length

}

int main()

{

SeqList *sq;

ListInitiate(sq);  //将sq指针的地址传给了SeqList ** L,进行初始化,充当了一个全局变量的作用

//InitList(sq);

InputSeqList(sq);

OutputSeqList(sq);

//InsertSeqList(sq,1,'a');

InsertList(sq,1,'a');

OutputSeqList(sq);

//DelSeqList(sq,2);

char c;

ListDelete(sq,2,c);

OutputSeqList(sq);

printf("%c成功被删除\n",c);

system("PAUSE");

return 0;

}不懂的直接加Q,Q已给你私信


标题名称:顺序表c语言输入函数 c语言输出顺序表
网站地址:http://cqcxhl.com/article/hhieje.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP