用C语言编写一个有关顺序表的程序代码 C语言编写一个程序实现两个有序(从小到大)顺序表合并成为一个...

作者&投稿:仇由师 (若有异议请与网页底部的电邮联系)
#include <stdio.h>
#include <malloc.h>

#define MaxSize 50

typedef char ElemType;

typedef struct
{
ElemType elem[MaxSize];
int length;
}SqList;

void InitList(SqList *L) /* 初始化顺序表 */
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}

void CreateListR(SqList *L,ElemType a[],int n) /*创建顺序表 */
{

int i;
for(i=0;i<n;i++)
L=(SqList *)malloc(sizeof(SqList));
L->elem[i]=a[i];
L->length++;
}

void DispList(SqList *L) /* 输出顺序表 */
{
int i;
if(ListEmpty(L)) return;
for(i=0;i<L->length;i++)
printf("%c",L->elem[i]);
printf("\n");
}

int ListLength(SqList *L) /* 求顺序表的长度 */
{
return(L->length);
}

int ListEmpty(SqList *L) /* 求顺序表是否为空 */
{
return(L->length==0);
}

int GetElem(SqList *L,int i,ElemType e) /*求顺序表中某个数据的元素值 */
{
if(i<1||i>L->length)
return 0;
else
e=L->elem[i-1];
return 1;
}

int LocateElem(SqList *L,ElemType e) /*按值查找元素*/
{
int i=0;
while(i<L->length&&L->elem[i]!=e) i++;
if(i>=L->length)
return 0;
else
return i+1;
}

int ListInsert(SqList *L,int i,ElemType e) /*按i位置插入元素*/
{
int j;
if(i<1||i>L->length+1)
return 0;
i--;
for (j=L->length;j>i;j--)
L->elem[j]=L->elem[j-1];
L->elem[i]=e;
L->length++;
return 1;
}

int ListDelete(SqList *L,int i,ElemType e) /*删除某个位置的元素*/
{
int j;
if (i<1||i>L->length)
return 0;
i--;
e=L->elem[i]; /*e中的放elem[i]有何用..以后没用到*/
for(j=i;j<L->length-1;j++)
L->elem[j]=L->elem[j+1];
L->length--;
return 1;
}

void DestroyList(SqList *L) /*销毁链表*/
{
free(L);
}

void main()
{
SqList L;
ElemType a[]={'a','b','c','d'};
int c;
int e;
while(1)
{
printf("Please Choose the step you want ?\n\n");
scanf("%d",&c);
if(c==0) break;
switch(c)
{
case 1: InitList(&L);break;
case 2: CreateListR(&L,a,4);break;
case 3: DispList(&L);break;
case 4: printf("long %d", ListLength(&L));break;
case 5: printf("%d",ListEmpty(&L));break;
case 6: GetElem(&L,3,e);break;
case 7: LocateElem(&L,'a');break;
case 8: ListInsert(&L,4,'f');break;
case 9: DispList(&L);break;
case 10: ListDelete(&L,3,e);break;
case 11: DispList(&L);break;
case 12: DestroyList(&L);break;
default: printf("error data");break;
}

}

}

#include<stdio.h>
#include<stdlib.h>

#define Size 50

//定义顺序表结构体类型

typedef struct Table{
int*head;//顺序表头指针,为整型
int length;//顺序表中元素个数
int size; //顺序表的长度
}Table;

//创建顺序表
Table CreateTable(){
Table T;
if(!(T.head=(int*)malloc(Size*sizeof(int)))){
printf("内存分配错误!\n");
exit(0);
}

T.size=Size;
T.length=0;
return T;
}

//增加
void Insert(Table T,int set,int values)//set为插入的位置,values为值
{
//首先判断插入位置是否正确
if(set<0||set>T.length){
printf("插入位置不正确!\n");
reutrn;
}

//判断是否有足够的内存空间存储增加的数
if(T.length==T.size){
if(!(T.head=(int*)realloc(T.head,(T.size+10)*sizeof(int)))){
printf("内存分配错误!\n");
exit(0);
}
T.size+=10;
}

//插入数据
for(int i=s.length;i>set;i--)
T.head[i]=T.head[i-1];

T.head[set]=values;
T.length++;
}

//删除
void Delete(Tabel T,int set)
{
if(set<0||set>=T.length)
{
printf("删除数的位置不争确,删除失败!\n");
return;
}

//输出数据
for(int i=set;i<s.length;i++)
T.head[i]=T.head[i+1];
T.length--;
}

//查找
int Search(Tabel T,int value)
{
for(int i=0;i<T.length;i++)
if(T.head[i]==value)
return i;
return -1;
}

用c语言描述数据结构编写一个能输出学生学号,年龄 性别的源代码?还有顺序表的删除与插入源代码~

1、结构体
struct std{
int num;
int age;
char sex;
};
2、顺序表
#include
#include
#define maxsize 1024
typedef int datatype;



typedef struct{
datatype data[maxsize];
int last;
}sequenlist;




sequenlist* InitList()
{
sequenlist *L=(sequenlist*)malloc(sizeof(sequenlist));
L->last=0;
return L;
}

int InsertList(sequenlist* L,datatype x,int i)
{
int j;
if(L->last>=maxsize-1)
{
printf("List Overflow!
");
return 0;
}
else if(iL->last+1)
{
printf("Error Insert Place!
");
return 0;
}
else
{
for(j=L->last;j>=i;--j)
L->data[j+1]=L->data[j];
L->data[i]=x;
++L->last;
return 1;
}
}

int DeleteList(sequenlist* L,int i)
{
int j;
if((iL->last))
{
printf("Error Delete Place!
");
return 0;
}
else
{
for(j=i;jlast;++j)
L->data[j]=L->data[j+1];
--L->last;
return 1;
}
}

int PrintList(sequenlist* L)
{
int i;
if(L->lastlast>maxsize-1)
{
printf("Error List!
");
return 0;
}
else if(L->last==0)
{
printf("Empty List!
");
return 0;
}
else
{
printf("/****Now Printing List...****/
");
for(i=1;ilast;++i)
printf("data(%d)%d
",i,L->data[i]);
printf("/****Printing Ended!****/
");
return 1;
}
}

int LengthList(sequenlist* L)
{
return L->last;
}

int LocateList(sequenlist* L,datatype x)
{
int i=1;
for(;ilast;++i)
if(L->data[i]==x) return i;
return 0;
}

void DelNodeList(sequenlist* L,datatype x)
{
int i;
i=LocateList(L,x);
while(i)
{
if(DeleteList(L,i)==0) break;
i=LocateList(L,x);
}
}

你提到的“奇怪错误”是由于你的exit宏和函数重名了,所以预处理器会把程序中的exit用-1代替,所以出错。

另外,你的合并函数也是错误的,无法达到要求,整个程序修改如下:

//---------------------------------------------------------------------------

#include
#include //注意这里,exit()函数要用到这个文件,这个文件已经包含了malloc()等函数的声明
#define OK 1
#define LIST_INIT_SIZE 100
#define OVERFLOW 0
#define EXIT -2 //************注意这里
typedef int ElemType;
typedef int Status;

typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;



Status InitList_Sq(SqList *L)
{ L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}


void Create_Sq(SqList *L)
{ int i,n;
printf("创建一个有序表:
");
printf("输入有序表中元素的个数:");
scanf("%d",&n);
L->length=n;
for(i=0;i<n;i++){
printf("输入第%d个元素的值:",i+1);
scanf("%d",&L->elem[i]);
printf("
");
}
}


void Disp_Sq(SqList *L) //************注意这里
{ int i,n;
n=L->length;
for(i=0;i<n;i++)
printf("%5d",L->elem[i]);
printf("
");
}


void Combine(SqList *la,SqList *lb) //************注意这里,此函数被重新编写
{
ElemType *pa=la->elem,*pb=lb->elem ;
int i,j,k,len_a=la->length,len_b=lb->length;
if ((la->elem=malloc((len_a+len_b)*sizeof(ElemType)))==NULL) exit(OVERFLOW);

for (k=i=j=0; i<len_a&&j<len_b; ) {
if (pa[i]elem[k++]=pa[i++];
else la->elem[k++]=pb[j++];
}
while (i<len_a)
la->elem[k++]=pa[i++];
while (j<len_b)
la->elem[k++]=pb[j++];

la->length=k;
la->listsize=k;

free(pa);

}

void main()
{SqList L1,L2;
InitList_Sq(&L1);
InitList_Sq(&L2);
Create_Sq(&L1);
Disp_Sq(&L1);
printf("
");
Create_Sq(&L2);
Disp_Sq(&L2); //************注意这里
printf("
");
Combine(&L1,&L2);
Disp_Sq(&L1); //************注意这里
}
//---------------------------------------------------------------------------

用c语言编写一段程序,建立一个顺序表(需要自己输入数据,并插入数据...
答:l->elem) exit(0); l->length=0; l->listsize=LIST_INIT_SIZE;}int InList(SqList *l){ int *p,*newbase; p=l->elem; while(1) { for(;p<l->elem+l->listsize;p++) { scanf("%d",p);if(*p==-1) break;l->length++; } if((p==l->elem+l->listsize))...

顺序表和链表的基本操作,用C语言实现!
答: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);//表满,不...

是C语言中建立顺序表的程序
答:建立方法很多,线性表是顺序表的顺序存储结构,这里我给你写个简单的例子参考一下,只要理解了,怎么写都不会错:具体代码如下:include <stdio.h> typedef struct{ int data[100];int length;}Seqlist;//定义Seq这个新的数据类型 void creat(Seqlist &L);//建立线性表 void show(Seqlist L);/...

编写c语言程序1. 设A和B是两个非递减的顺序表.编写算法,把A和B中都...
答:} List p = head->next; while(p) { cout<data<<" "; p = p->next; } cout<<endl;} List unionList(List list1,List list2){ if(list1 == NULL||list1->next==NULL) return list2; if(list2 == NULL||list1->next==NULL) return list1...

数据结构 c语言版 ——顺序表的查找、插入与删除
答:include<stdio.h> include<stdlib.h> define N 10 //顺序表的最大容量 int length=0; //顺序表的当前元素个数 define TRUE 1 define FALSE 0 define OK 1 define ERROR 0 define INFEASIBLE -1 define OVERFLOW -2 define LIST_INIT_SIZE 100//线性表存储的空间初始化分配量 define LIST...

数据结构实验(C语言): 顺序表实验
答: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) /*...

c语言 求大神帮助!!关于顺序表的 比较紧急!!
答:}int ListInsert(LIST L,DataType x) {if(L->size >= MAXSIZE) return 0; // 未能成功插入元素L->a[L->size] = x;++L->size;return 1; // 成功插入}// 该函数完成要求的操作void ListManage(LIST L) {int i,j,k = 0; // k记录表首元素的位置DataType t;for(i = 0; i ...

求一个用C语言写的顺序表程序!!
答:for(i=0;i<n-1;i )for(q=h->next,p=q->next;p!=NULL;q=p,p=p->next)if(q->data>p->data){ chg=p->data;p->data=q->data;q->data=chg;} printf("ÅÅÐòºóµÄÁ´±íΪ:");print(h);return h;} stru...

线性表顺序存储的12个基本操作,求c语言程序,在c++6.0环境下编译的
答:bool InsertNode(T e, int index); // 插入值为e的新数据元素使其成为表的第index个元素 bool InsertNode(T e); // 按元素值e的大小插入(顺序表有序)bool DeleteNode(int index,T& e); // 从顺序表中删除第index个数据元素 被删除元素存入e void traverse(char); // 遍历顺序表 ...

顺序表求解?急急急!C语言版
答:j;for(i=0;i<maxn;i++)if(!f[i]) break;for(j=i;j>=1;j--)f[j]=f[j-1];f[0]=s;} void SeqList(int item,int n){ int t=0,i;for(i=0;i<n;i++)if(f[i]!=item){ f[t++]=f[i];} for(i=0;i<t;i++)printf("%d ",f[i]);printf("\n");} ...