首页 > 代码库 > 线性表
线性表
#define LOCAL#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/typedef struct{ ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/}SeqList;int Locate(SeqList L, ElemType e){ int i=0; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ while ((i<=L.last)&&(L.elem[i]!=e))/*顺序扫描表,直到找到值为e的元素, 或扫描到表尾而没找到*/ i++; if (i<=L.last) return(i+1); /*若找到值为e的元素,则返回其序号*/ else return(-1); /*若没找到,则返回空序号*/}/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,i的合法取值范围是 1≤i≤L->last+2 */int InsList(SeqList *L,int i,ElemType e){ int k; if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/ { printf("插入位置i值不合法"); return(ERROR); } if(L->last>= MAXSIZE-1) { printf("表已满无法插入"); return(ERROR); } for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置*/ L->elem[k+1]=L->elem[k]; L->elem[i-1]=e; /*在C语言数组中,第i个元素的下标为i-1*/ L->last++; return(OK);}int DelList(SeqList *L,int i,ElemType *e)/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */ { int k; if((i<1)||(i>L->last+1)) { printf("删除位置不合法!"); return(ERROR); } *e = L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/ for(k=i; i<=L->last; k++) L->elem[k-1] = L->elem[k]; /*将后面的元素依次前移*/ L->last--; return(OK);}void merge(SeqList *LA, SeqList *LB, SeqList *LC){ int i,j,k; i=0;j=0;k=0; while(i<=LA->last&&j<=LB->last) if(LA->elem[i]<=LB->elem[j]) { LC->elem[k]= LA->elem[i]; i++; k++; } else { LC->elem[k]=LB->elem[j]; j++; k++; } while(i<=LA->last) /*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/ { LC->elem[k]= LA->elem[i]; i++; k++; } while(j<=LB->last) /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/ { LC->elem[k]= LB->elem[j]; j++; k++; } LC->last=LA->last+LB->last+1;}void Display(SeqList *Sq){ for(int i=0; i<=Sq->last; i++) { printf("%d ",Sq->elem[i]); }}int main(){#ifdef LOCAL freopen("2.in","r",stdin); freopen("2.out","w",stdout);#endif SeqList LA,LB,LC; int i,r; printf("请输入线性表LA的长度:\n"); scanf("%d",&r); LA.last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=LA.last; i++) { scanf("%d",&LA.elem[i]); } printf("请输入线性表LB的长度:\n"); scanf("%d",&r); LB.last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=LB.last; i++) { scanf("%d",&LB.elem[i]); } merge(&LA,&LB,&LC); Display(&LC); /* SeqList l; int p,q,r; int i; printf("请输入线性表的长度:\n"); scanf("%d",&r); l.last = r-1; printf("请输入线性表的各元素值:\n"); for(i=0; i<=l.last; i++) { scanf("%d",&l.elem[i]); } printf("请输入要查找的元素值:\n"); scanf("%d",&q); p=Locate(l,q); if(p == -1) printf("在此线性表中没有该元素!\n"); else printf("该元素在线性表中的位置为:%d\n",p); ElemType key; int local; printf("请输入要插入元素值key,和要插入的位置local.\n"); scanf("%d%d",&key,&local); printf("插入元素值:"); if(InsList(&l,key,local)==OK) { printf("OK\n"); }else { printf("ERROR\n"); } scanf("请输入要删除元素的位置:\n",&local); printf("删除元素值:"); if(DelList(&l,local,&key)==OK) { printf("OK,key=%d\n",key); }else { printf("ERROR\n"); } */ return 0;}
线性表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。