typedef的用法线性表(线性表c语言实现 求高人完善)

2024-07-02 20:01:58 1

typedef的用法线性表(线性表c语言实现 求高人完善)

这篇文章给大家聊聊关于typedef的用法线性表,以及线性表c语言实现 求高人完善对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

线性表c语言实现 求高人完善

#include 《stdio.h》#include 《malloc.h》#define MaxSize 50typedef char ElemType; typedef struct { ElemType data; //存放顺序表元素 int length; //存放顺序表的长度} SqList; //顺序表的类型定义void CreateList(SqList *&L,ElemType a,int n)//建立顺序表{ int i; L=(SqList *)malloc(sizeof(SqList)); for (i=0;i《n;i++) L-》data; L-》length=n;}void InitList(SqList *&L){ L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间 L-》length=0;}void DestroyList(SqList *&L){ free(L);}int ListEmpty(SqList *L).{ return(L-》length==0);}int ListLength(SqList *L){ return(L-》length);}void DispList(SqList *L){ int i; if (ListEmpty(L)) return; for (i=0;i《L-》length;i++) printf("%c ",L-》data); printf("\n");}int GetElem(SqList *L,int i,ElemType &e){ if (i《1 || i》L-》length) return 0; e=L-》data; return 1;}int LocateElem(SqList *L, ElemType e){ int i=0; while (i《L-》length && L-》data!=e) i++; if (i》=L-》length) return 0; else return i+1;}int ListInsert(SqList *&L,int i,ElemType e){ int j; if (i《1 || i》L-》length+1) return 0; i--; //将顺序表位序转化为elem下标 for (j=L-》length;j》i;j--) //将data及后面元素后移一个位置 L-》data; L-》data=e; L-》length++; //顺序表长度增1 return 1;}int ListDelete(SqList *&L,int i,ElemType &e){ int j; if (i《1 || i》L-》length) return 0; i--; //将顺序表位序转化为elem下标 e=L-》data; for (j=i;j《L-》length-1;j++) //将data之后的元素前移一个位置 L-》data; L-》length--; //顺序表长度减1 return 1;}#include 《stdio.h》#include 《malloc.h》typedef char ElemType;typedef struct LNode //定义单链表结点类型{ ElemType data; struct LNode *next; //指向后继结点} LinkList;void CreateListF(LinkList *&L,ElemType a,int n)//头插法建立单链表{ LinkList *s;int i; L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点 L-》next=NULL; for (i=0;i《n;i++) { s=(LinkList *)malloc(sizeof(LinkList));//创建新结点 s-》data=a; s-》next=L-》next; //将*s插在原开始结点之前,头结点之后 L-》next=s; }}void CreateListR(LinkList *&L,ElemType a,int n)//尾插法建立单链表{ LinkList *s,*r;int i; L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点 L-》next=NULL; r=L; //r始终指向终端结点,开始时指向头结点 for (i=0;i《n;i++) { s=(LinkList *)malloc(sizeof(LinkList));//创建新结点 s-》data=a; r-》next=s; //将*s插入*r之后 r=s; } r-》next=NULL; //终端结点next域置为NULL}void InitList(LinkList *&L){ L=(LinkList *)malloc(sizeof(LinkList)); //创建头结点 L-》next=NULL;}void DestroyList(LinkList *&L){ LinkList *p=L,*q=p-》next; while (q!=NULL) { free(p); p=q; q=p-》next; } free(p); //此时q为NULL,p指向尾结点,释放它}int ListEmpty(LinkList *L){ return(L-》next==NULL);}int ListLength(LinkList *L){ LinkList *p=L;int i=0; while (p-》next!=NULL) { i++; p=p-》next; } return(i);}void DispList(LinkList *L){ LinkList *p=L-》next; while (p!=NULL) { printf("%c ",p-》data); p=p-》next; } printf("\n");}int GetElem(LinkList *L,int i,ElemType &e){ int j=0; LinkList *p=L; while (j《i && p!=NULL) { j++; p=p-》next; } if (p==NULL) //不存在第i个数据结点 return 0; else //存在第i个数据结点 { e=p-》data; return 1; }}int LocateElem(LinkList *L,ElemType e){ LinkList *p=L-》next; int n=1; while (p!=NULL && p-》data!=e) { p=p-》next; n++; } if (p==NULL) return(0); else return(n);}int ListInsert(LinkList *&L,int i,ElemType e){ int j=0; LinkList *p=L,*s; while (j《i-1 && p!=NULL) //查找第i-1个结点 { j++; p=p-》next; } if (p==NULL) //未找到位序为i-1的结点 return 0; else //找到位序为i-1的结点*p { s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*s s-》data=e; s-》next=p-》next; //将*s插入到*p之后 p-》next=s; return 1; }}int ListDelete(LinkList *&L,int i,ElemType &e){ int j=0; LinkList *p=L,*q; while (j《i-1 && p!=NULL) //查找第i-1个结点 { j++; p=p-》next; } if (p==NULL) //未找到位序为i-1的结点 return 0; else //找到位序为i-1的结点*p { q=p-》next; //q指向要删除的结点 if (q==NULL) return 0; //若不存在第i个结点,返回0 e=q-》data; p-》next=q-》next; //从单链表中删除*q结点 free(q); //释放*q结点 return 1; }}

线性表的基本操作

#include《stdio.h》#include《stdlib.h》#include《string.h》# define null 0typedef char ElemType; /* 字符型数据*/typedef struct LNode{ ElemType data; struct LNode *next;};void setnull(struct LNode **p);int length (struct LNode **p);ElemType get(struct LNode **p,int i);void insert(struct LNode **p,ElemType x,int i);int locate(struct LNode **p,ElemType x);void Delete(struct LNode **p,int i);void display(struct LNode **p);struct LNode * reverse(struct LNode **head);main(){ struct LNode *head; /*定义变量*/ int select,x1,x2,x3; int i,n; int m,g; char e,y; setnull(&head); /*建一链表并设置为空表*/ printf("请输入数据长度: "); scanf("%d",&n); printf("将数据插入到单链表中: "); for(i=1;i《=n;i++) { scanf("%c",&y); if(y==’\n’) i--; else { printf("将数据插入到单链表中: "); insert(&head,y,i); } } /*插入数据到链表*/display(&head); /*显示链表所有数据*/ printf("select 1 求长度 length()\n"); printf("select 2 取结点 get()\n"); printf("select 3 求值查找 locate()\n"); printf("select 4 删除结点 delete()\n"); printf("select 5 链表反转 reverse()\n"); printf("input your select: "); scanf("%d",&select); switch(select) { case 1: { x1=length(&head); printf("输出单链表的长度%d\n ",x1); display(&head); }break; case 2: { printf("请输入要取得结点: "); scanf("%d",&m); x2=get(&head,m); printf("%c\n",x2); display(&head); }break; case 3: { printf("请输入要查找的数据: "); scanf("\n%c",&e); x3=locate(&head,e); printf("%d\n",x3); display(&head); }break; case 4: { printf("请输入要删除的结点: "); scanf("%d",&g); Delete(&head,g); display(&head); }break; case 5: { printf("链表反转:"); reverse(&head); display(&head); }break; }}void setnull(struct LNode **p){ *p=null; }int length (struct LNode **p){ int n=0; struct LNode *q=*p; while (q!=null) { n++; q=q-》next; } return(n);}ElemType get(struct LNode **p,int i){ int j=1; struct LNode *q=*p; while (j《i&&q!=null) { q=q-》next; j++; } if(q!=null) return(q-》data); else printf("位置参数不正确!\n"); return null;}int locate(struct LNode **p,ElemType x){ int n=0; struct LNode *q=*p; while (q!=null&&q-》data!=x) { q=q-》next; n++; } if(q==null) return(-1); else return(n+1);}void insert(struct LNode **p,ElemType x,int i){ int j=1; struct LNode *s,*q; q=*p; s=(struct LNode *)malloc(sizeof(struct LNode)); s-》data=x; if(i==1) { s-》next=q; *p = s; } else { while(j《i-1&&q-》next!=null) { q=q-》next; j++; } if(j==i-1) { s-》next=q-》next; q-》next=s; } else printf("位置参数不正确!\n"); } }void Delete(struct LNode **p,int i){ int j=1; struct LNode *q=*p,*t=null; if(i==1) { t=q; *p=q-》next;} else { while(j《i-1&&q-》next!=null) { q=q-》next; j++; } if(q-》next!=null&&j==i-1) { t=q-》next; q-》next=t-》next; } else printf("位置参数不正确!\n"); } if(t=null) free(t);}void display(struct LNode **p){ struct LNode *q; q=*p; printf("单链表显示: "); if(q==null) printf("链表为空!"); else if (q-》next==null) printf("%c\n",q-》data); else { while(q-》next!=null) { printf("%c-》",q-》data); q=q-》next; } printf("%c",q-》data); } printf("\n");} struct LNode * reverse(struct LNode **head){struct LNode *p,*q;p=null;while((*head)-》next!=null){ q=p; p=*head; (*head)=(*head)-》next; p-》next=q; }(*head)-》next=p;return *head;}

线性表的创建,删除插入等操作

线性表的操作类似于数组,都是连续存储,所以相关的操作也是类似。 插入:在第t个位置插入元素,需要将从第t个位置到第n个位置向后移动。 删除:删除第t个元素,从t+1位置元素往前移动 插入和删除都需要将元素移动,顺序存储结构线性表所需要的平均时间复杂度为O(n)。 下面是根据数据结构实现的代码; #include #include #define TRUE 1; #define FALSE 0; #define OK 1; #define ERROR 0; #define OVERFLOW -2; typedef int Status; typedef int ElemType; typedef struct { ElemType *elem;//线性表的基地址 int Length;//长度 int Listsize;//当前分配的存储容量 }SqList; Status InitList(SqList &L)//初始化线性表 { L.elem = (ElemType*)malloc(100 * sizeof(ElemType));//分配内存 if (!L.elem) exit(-2); L.Length = 0; L.Listsize = 100; return OK; } Status ListInsert(SqList &L,int i,ElemType e)//在顺序表第i个位置之前插入新的元素e { if (i 1 || i》L.Length + 1) return ERROR;//i值不合法 if (L.Length 》= L.Listsize)//存储空间已满 { ElemType *newbase = (ElemType*)realloc(L.elem, (L.Listsize + 10) * sizeof(ElemType)); if (!newbase) { exit(-2); } L.elem = newbase; L.Listsize += 10; } ElemType *q = &(L.elem); //将L表中第i个元素的地址信息传递给指针q for (ElemType *p = &(L.elem); p 》= q; --p)//p为末尾元素的地址 { *(p + 1) = *p; } *q = e; ++L.Length; return OK; } Status OutputList(SqList L)//输出线性表中的元素 { int i = 0; for (i ; i 《 L.Length ; i++) { printf("%d ", L.elem); } return OK; } Status ListLength(SqList L)//返回线性表的表长 { return L.Length; } Status GetElem(SqList L, int i, ElemType &e)//用e返回第i个元素的值 { if (iL.Length) return ERROR; e = L.elem; return OK; } Status ClearList(SqList &L)//清除线性表的数据 { L.Length = 0; return OK; } Status DeleteList(SqList &L,int i,ElemType &e)//删除第i个元素,并用e返回其值 { if (iL.Length) return ERROR; e = L.elem;//通过下标找到第i个元素的值 ElemType *p = &(L.elem); ElemType *q = L.elem + L.Length - 1; for (p; p

C语言线性表急求大神解

#include《stdio.h》#include《stdlib.h》typedef struct{int *data,len;}SL;void showlist(SL *l){int i; for(i=0;i《(*l).len-1;i++){printf("%d ",(*l).data);}printf("%d\n",(*l).data);}void createlist(SL *l){int i,n; printf("请输入线性表的长度:");scanf("%d",&n);(*l).len=n;(*l).data=(int*)calloc(n,sizeof(int));printf("请输入%d个整数:",n);for(i=0;i《n;i++)scanf("%d",(*l).data+i);}//找到,返回第1次出现的下标,//找不到返回-1 int search(SL *l,const int n){int i; for(i=0;i《(*l).len;i++){if(n==(*l).data)return i;}return -1;}//n为要删除的整数的值,//会删除所有值为n的线性表的元素 void delete(SL *l,const int n){int i,j; for(i=0;i《(*l).len;){if(n==(*l).data){for(j=i+1;j《(*l).len;j++){(*l).data;}(*l).len--;}elsei++;}}void deleterange(SL *l,const int min,const int max){int i; for(i=0;i《(*l).len;i++){if((*l).data《=max)delete(l,(*l).data);}}void freelist(SL *l){if(!(*l).data)free((*l).data);}int main(){int loc,tofind,min,max;SL l; createlist(&l);printf("请输入要查找的整数:");scanf("%d",&tofind);if(-1!=(loc=search(&l,tofind)))printf("此数据在线性表中第1次出现的下标是:%d\n",loc);elseputs("线性表中无此数据");printf("请输入要删除的整数的最小值 最大值:");scanf("%d %d",&min,&max);deleterange(&l,min,max);printf("删除值为%d-%d的元素后的线性表如下:\n",min,max);showlist(&l);freelist(&l); system("PAUSE");return 0; }

数据结构实验:线性表(1)

/*2.1创建空顺序表*/PSeqList createNullList_seq(int m){PSeqList palist =(PSeqList)malloc(sizeof(struct SeqList));if (palist!=NULL){palist-》element=(DataType*)malloc(sizeof(DataType)*m);if (palist-》element){palist-》MAXNUM=m;palist-》n=0;return palist;}else free (palist);}printf("Out of space!! \n");return NULL;}/*2.2判断线性表是否为空*/int isNullList_seq(PSeqList palist){return(palist-》n==0);}/*2.3顺序表删除*/int deleteP_seq(PSeqList palist,int p){int q;if(p《0 || p》palist-》n-1){printf("Not exist!\n");return 0;}for (q=p;q《palist-》n-1;q++)palist-》element;palist-》n=palist-》n-1;return 1;}/*2.4在顺序表中求某元素的下标*/int locate_seq(PSeqList palist,DataType X){int q;for (q=0;q《palist-》n;q++)if(palist-》element==X)return q;return -1;}/*2.5顺序表的前插入*/int insertPre_seq(PSeqList palist,int p,DataType X){int q;if(palist-》n 》=palist-》MAXNUM){printf("Overflow! \n");return 0;}if(p《0 || p》palist-》n){printf("Not exist! \n");return 0;}for(q=palist-》n-1;q》=p;q--)palist -》element;palist-》element=X;palist-》n=palist -》n+1;return 1;}//2.6遍历palist所指所有元素的值void print_seq(PSeqList palist){int i;if(palist != NULL)for(i=0;i《palist-》n;i++)printf("out of element:%d\n",palist-》element);printf("\n\n");}//2.7线性表排序void sort_seq(PSeqList palist){int i,j;DataType x;for(i=1;i《palist-》n;i++){x=palist-》element;for(j=i-1;j》=0;j--)if(x《palist-》element)palist-》element;elsebreak;palist-》element=x;}}/*2.8顺序表的后插*/int insertPost_seq(PSeqList palist,int p,DataType X){int q;if(palist-》n 》=palist-》MAXNUM){printf("Overflow! \n");return 0;}if(p《0 || p》palist-》n){printf("Not exist! \n");return 0;}for(q=palist-》n-1;q》p;q--)palist -》element;palist-》element=X;palist-》n=palist -》n+1;return 1;}/*2.9尾插*/int insertRear(PSeqList palist,DataType x){if(palist-》n==palist-》MAXNUM){printf("\n List overflow!");return(0);}palist-》element=x;palist-》n++;return(1);}/*2.10头插*/int insertHead(PSeqList palist,DataType x){int q;if(palist-》n==palist-》MAXNUM){printf("\n List overflow!");return(0);}for(q=palist-》n-1;q》=0;q--)palist -》element;palist-》element=x;palist-》n++;return(1);}/*2.11头删*/int deleteHead(PSeqList palist){int q;for (q=0;q《palist-》n-1;q++)palist-》element;palist-》n=palist-》n-1;return 1;}/*2.12尾删*/int deleteRear(PSeqList palist){palist-》n--;return(1);}

如何建立一个线性表,用c++的基本语法是什么

用c++建立一个线性表有以下5步:

1、准备数据:

定义了顺序表的最大长度MAXLEN、顺序表数据元素的类型DATA以及顺序表的数据结构SLType。在数据结构SLType中,Listen为顺序表已存结点的数量,也就是当前顺序表的长度,ListData是一个结构数组,用来存放各个数据结点。我们认为该顺序表是一个班级学生的记录。其中,key为学号,name为学生的名称,age为年龄。因为数组都是从下标0开始的,为了使用方便,我们从下标1开始记录数据结点,下标0的位置不可用。

2、初始化顺序表:

在使用顺序表之前,首先创建一个空的顺序表,也就是初始化顺序表。这里,在程序中只需设置顺序表的结点数量ListLen为0即可。这样,后面需要添加的数据元素将从顺序表的第一个位置存储。示例代码:

3、计算线性表的长度:计算线性表的长度也就是计算线性表中结点的个数,由于我们在SLType中定义了ListLen来表示结点的数量,所以我们只需要获得这个变量的值即可。

4、插入结点:

插入节点就是在线性表L的第i个位置上插入一个新的结点,使其后的结点编号依次加1。这时,插入一个新节点之后,线性表L的长度将变为n+1。插入结点操作的难点在于随后的每个结点数据都要向后移动,计算机比较大,示例代码如下:

5、追加结点:

追加结点就是在顺序表的尾部插入结点,因此不必进行大量数据的移动,代码实现与插入结点相比就要简单的多。

线性表的建立及基本操作的实现

// 8888888.cpp : Defines the entry point for the console application.//// practice31.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include《stdio.h》#include 《malloc.h》#include 《stdlib.h》#include 《iostream.h》 // 线性表的动态分配顺序存储结构 #define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量 #define LISTINCREMENT 2 // 线性表存储空间的分配增量 typedef int ElemType; // 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSEstruct SqList { ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) };int InitList(SqList &L) // 算法2.3 { // 操作结果:构造一个空的顺序线性表 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(1); // 存储分配失败 L.length=0; // 空表长度为0 L.listsize=LIST_INIT_SIZE; // 初始存储容量 return 1; } int DestroyList(SqList &L) { // 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L free(L.elem); L.elem=NULL; L.length=0; L.listsize=0; return 1; } int ClearList(SqList &L) { // 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 L.length=0; return 1; } int ListEmpty(SqList L) { // 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE if(L.length==0) return 0; else return 1; } int ListLength(SqList L) { // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 return L.length; } int GetElem(SqList L,int i,ElemType &e) { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) // 操作结果:用e返回L中第i个数据元素的值 if(i《1||i》L.length) exit(1); e=*(L.elem+i-1); return 1; } int equal(ElemType c1,ElemType c2) { // 判断是否相等的函数,Union()用到 if(c1==c2) return 1; else return 0; } int LocateElem(SqList L,ElemType e) { // 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) // 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。 // 若这样的数据元素不存在,则返回值为0。算法2.6 ElemType *p; int i=1; // i的初值为第1个元素的位序 p=L.elem; // p的初值为第1个元素的存储位置while(i《=L.length&&!equal(*p++,e)) { ++i; } if(i《=L.length) return i; else return 0; } int PriorElem(SqList L,ElemType cur_e,ElemType ⪯_e) { // 初始条件:顺序线性表L已存在 // 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱, // 否则操作失败,pre_e无定义 int i=2; ElemType *p=L.elem+1; while(i《=L.length&&*p!=cur_e) { p++; i++; } if(i》L.length) return 0; else { pre_e=*--p; return 1; } } int NextElem(SqList L,ElemType cur_e,ElemType &next_e) { // 初始条件:顺序线性表L已存在 // 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继, // 否则操作失败,next_e无定义 int i=1; ElemType *p=L.elem; while(i《L.length&&*p!=cur_e) { i++; p++; } if(i==L.length) return 0; else { next_e=*++p; return 1; } } int ListInsert(SqList &L,int i,ElemType e) // 算法2.4 { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 // 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 ElemType *newbase,*q,*p; if(i《1||i》L.length+1) // i值不合法 return 0; if(L.length》=L.listsize) // 当前存储空间已满,增加分配 { if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)))) exit(1); // 存储分配失败 L.elem=newbase; // 新基址 L.listsize+=LISTINCREMENT; // 增加存储容量 } q=L.elem+i-1; // q为插入位置 for(p=L.elem+L.length-1;p》=q;--p) // 插入位置及之后的元素右移 *(p+1)=*p; *q=e; // 插入e ++L.length; // 表长增1 return 1; } int ListDelete(SqList &L,int i,ElemType &e) // 算法2.5 { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) // 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 ElemType *p,*q; if(i《1||i》L.length) // i值不合法 return 0; p=L.elem+i-1; // p为被删除元素的位置 e=*p; // 被删除元素的值赋给e q=L.elem+L.length-1; // 表尾元素的位置 for(++p;p《=q;++p) // 被删除元素之后的元素左移 *(p-1)=*p; L.length--; // 表长减1 return 1; } int ListTraverse(SqList L,void(*vi)(ElemType&)) { // 初始条件:顺序线性表L已存在 // 操作结果:依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败 // vi()的形参加’&’,表明可通过调用vi()改变元素的值 ElemType *p; int i; p=L.elem; for(i=1;i《=L.length;i++) vi(*p++); cout《《endl; return 1; }void print(ElemType &c) { printf("%d ",c); }// // 线性表的单链表存储结构struct LNode{ ElemType data; LNode *next;};typedef LNode *LinkList; // 另一种定义LinkList的方法// 操作结果:构造一个空的线性表LStatus InitList(LinkList &L){ L=(LinkList)malloc(sizeof(LNode)); // 产生头结点,并使L指向此头结点 if(!L) // 存储分配失败 exit(1); L-》next=NULL; // 指针域为空 return OK;}// 初始条件:线性表L已存在。操作结果:销毁线性表LStatus DestroyList(LinkList &L){ LinkList q; while(L) { q = L-》next; free(L); L = q; } return OK;}// 初始条件:线性表L已存在。操作结果:将L重置为空表Status ClearList(LinkList L) // 不改变L{ LinkList p,q; p=L-》next; // p指向第一个结点 while(p) // 没到表尾 { q=p-》next; free(p); p=q; } L-》next=NULL; // 头结点指针域为空 return OK;}// 初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSEStatus ListEmpty(LinkList L){ if(L-》next) return FALSE; else return TRUE;}// 初始条件:线性表L已存在。操作结果:返回L中数据元素个数int ListLength(LinkList L){ int i=0; LinkList p=L-》next; // p指向第一个结点 while(p) // 没到表尾 { i++; p=p-》next; } return i;}// L为带头结点的单链表的头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回ERRORStatus GetElem(LinkList L,int i,ElemType &e){ int j=1; // j为计数器 LinkList p=L-》next; // p指向第一个结点 while(p&&j《i) // 顺指针向后查找,直到p指向第i个元素或p为空 { p=p-》next; j++; } if(!p||j》i) // 第i个元素不存在 return ERROR; e=p-》data; // 取第i个元素 return OK;}Status compare(ElemType a,ElemType b){ if(a==b) return 1; else return 0;}// 初始条件: 线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)// 操作结果: 返回L中第1个与e满足关系compare()的数据元素的位序。// 若这样的数据元素不存在,则返回值为0int LocateElem(LinkList L,ElemType e){ LinkList p; int j=0; p = L-》next; while(p) { j++; if(compare(p-》data,e)) p = p-》next; return j; } return 0;}// 初始条件: 线性表L已存在// 操作结果: 若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,// 返回OK;否则操作失败,pre_e无定义,返回INFEASIBLEStatus PriorElem(LinkList L,ElemType cur_e,ElemType ⪯_e){ LinkList p,q; p = L-》next; while(p-》next) { q = p-》next; if(q-》data == cur_e) { pre_e = p-》data; return OK; } p = q; } return INFEASIBLE; }// 初始条件:线性表L已存在// 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,//返回OK;否则操作失败,next_e无定义,返回INFEASIBLEStatus NextElem(LinkList L,ElemType cur_e,ElemType &next_e){ LinkList p,q; p = L-》next; while(p-》next) { if(p-》data == cur_e) { next_e = p-》next-》data; return OK; } p = p-》next; } return INFEASIBLE;}// 在带头结点的单链线性表L中第i个位置之前插入元素eStatus ListInsert(LinkList L,int i,ElemType e){ int j=0; LinkList p=L,s; while(p&&j《i-1) // 寻找第i-1个结点 { p=p-》next; j++; } if(!p||j》i-1) // i小于1或者大于表长 return ERROR; s=(LinkList)malloc(sizeof(LNode)); // 生成新结点 s-》data=e; // 插入L中 s-》next=p-》next; p-》next=s; return OK;}// 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值Status ListDelete(LinkList L,int i,ElemType &e) { LinkList p,q; p = L; int j=0; while(p && j《i-1) { p = p-》next; j++; } if(!p || j》i-1) return ERROR; q = p-》next; e = q-》data; p-》next = q-》next; free(q); return OK;}// 初始条件:线性表L已存在// 操作结果:依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败Status ListTraverse(LinkList L){ LinkList p; p = L-》next; while(p) { printf("%d ",p-》data); p = p-》next; } printf("\n"); return OK;}// 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表Lvoid CreateList(LinkList &L,int n){ L = (LinkList)malloc(sizeof(LNode)); LinkList p; L-》next = NULL; scanf("%d",&n); for(int i=n;i》0 ;--i) { p=(LinkList)malloc(sizeof(LNode)); // 生成新结点 scanf("%d",&p-》data); // 输入元素值 p-》next = L-》next; L-》next = p; } }// 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表void CreateList2(LinkList &L,int n){ int i; LinkList p,q; L=(LinkList)malloc(sizeof(LNode)); // 生成头结点 L-》next=NULL; q=L; printf("请输入%d个数据\n",n); for(i=1;i《=n;i++) { p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p-》data); q-》next=p; q=q-》next; } p-》next=NULL;}int main(int argc, char* argv){ SqList La,Lb; int i; int j; i=InitList(La); if(i==1) // 创建空表La成功 for(j=1;j《=5;j++) // 在表La中插入5个元素 i=ListInsert(La,j,j); printf("La= "); // 输出表La的内容 ListTraverse(La,print); printf("表长为:"); printf("%d\n",ListLength(La)); int a= {21,23,14,5,56,17,31}; i=InitList(Lb); if(i==1) // 创建空表La成功 for(j=1;j《=7;j++) i=ListInsert(Lb,j,a); printf("Lb= "); // 输出表La的内容 ListTraverse(Lb,print); int pos; printf("在第几个位置插值:"); scanf("%d",&pos); ListInsert(Lb,pos,66); printf("Lb= "); // 输出表La的内容 ListTraverse(Lb,print);// int n=5; LinkList Lc; CreateList2(Lc,n); //按尾插入法来建立相应单链表 printf("按尾插入法来建立相应单链表\n"); printf("Lc="); // 输出链表La的内容 ListTraverse(Lc); }

实验内容: 一、 线性顺序表1: 函数调用方式实现建立线性表及线性表的各项功能 typedef struct List { ET

#include《stdio.h》int ins1(int v,int i, int b){int j;if(i《0||i》8){printf("the value of i is out of range\n");return 0;}for(j=9;j》i;j--)v;v=b;return 1;}void main(){int a,i,j,b,flag;int k=0;printf("请输入9个整数:\n");for(j=0;j《9;j++)scanf("%d",&a);printf("插入前的线性表是:\n");for(j=0;j《9;j++){printf("%4d",a);k++;//if(k%5==0)printf("\n");}printf("\n");printf("请输入插入的位置i和元素b:");scanf("%d%d",&i,&b);flag=ins1(a,i,b);if(flag){printf("插入后的线性表是:\n");k=0;for(j=0;j《10;j++){printf("%4d",a);k++;//if(k%5==0)printf("\n");}printf("\n");}}

C语言中怎么定义个线性表

1、定义结构体类型,这里需要利用指针和结构体,其中m和n分别表示矩阵的行和列。

2、为矩阵申请储存空间,注意这里使用了malloc()函数。

3、初始化矩阵,这里将矩阵初始化为m*n的数组,且矩阵中的每一个元素的值均为0。

4、释放存储空间。

5、一般在定义阶段就确定数组的大小,输入数字即为数组大小。

6、然后,可以对数组进行初始化,在花括号{}中输入就完成了。

C语言线性表问题,求大佬解答

#define _CRT_SECURE_NO_WARNINGS#include《stdio.h》#include《stdlib.h》#include《string.h》#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OVERFLOW 0#define OK 1#define ERROR 0typedef char ElemType;typedef int status;typedef struct{ElemType *elem;int length;int listsize;}SqList;void CreatList(SqList &L, ElemType a, int n){int i;L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if (!L.elem)exit(OVERFLOW);for (i = 0; i《n; i++){L.elem;}L.length = n;L.listsize = LIST_INIT_SIZE;}status ListInsert(SqList &L, ElemType a){int i = 0;ElemType *newbase;if (L.length 》= LIST_INIT_SIZE){newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT)*sizeof(ElemType));if (!newbase)exit(OVERFLOW);L.elem = newbase;L.listsize += LISTINCREMENT;}L.elem = a;L.length++;return OK;}void ListDisp(SqList L){int i;for (i = 0; i《L.length; i++){fflush(stdin);printf("%c", L.elem);}}int main(){SqList L;int i;ElemType a, x;for (i = 0; i《5; i++){fflush(stdin);scanf("%c", &a);}fflush(stdin);scanf("%c", &x);CreatList(L, a, 5);ListInsert(L, x);ListDisp(L);system("pause");return 0;}

清空缓冲区的地方我给你改了下 ,使用fflush(stdin) 字符输入按照这个方式

不过我发现你插入有问题,没去细看,不过这样运行时没有问题.

录入会出现问题,你要考虑是不是溢出了,或者\0

看头像,有惊喜

关于typedef的用法线性表,线性表c语言实现 求高人完善的介绍到此结束,希望对大家有所帮助。

typedef的用法线性表(线性表c语言实现 求高人完善)

本文编辑:admin

本文相关文章:


typedef的用法线性表(C语言中怎么定义个线性表)

typedef的用法线性表(C语言中怎么定义个线性表)

本文目录C语言中怎么定义个线性表线性表的创建,删除插入等操作如何建立一个线性表,用c++的基本语法是什么线性表c语言实现 求高人完善线性表的基本操作实验内容: 一、 线性顺序表1: 函数调用方式实现建立线性表及线性表的各项功能 typede

2024年7月24日 14:37

更多文章:


iframe页面示例(iframe 内显示的网页 只显示改网页的某一部分!怎么写)

iframe页面示例(iframe 内显示的网页 只显示改网页的某一部分!怎么写)

本文目录iframe 内显示的网页 只显示改网页的某一部分!怎么写的应用实例,简单点的求完整的iframe自适应高度例子,最好是整个网页源代码用iframe标签如何实现左右分栏,求例子jquery 如何实现iframe页面的切换asp.ne

2023年6月11日 00:00

分布式数据库软件(分布式数据库系统(DDBS)概述)

分布式数据库软件(分布式数据库系统(DDBS)概述)

大家好,关于分布式数据库软件很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于分布式数据库系统(DDBS)概述的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文

2024年7月1日 16:20

java静态方法可以覆写(为什么网上回答都说java中子类不能覆写父类中的静态方法,而我实际操作起来却可以呢)

java静态方法可以覆写(为什么网上回答都说java中子类不能覆写父类中的静态方法,而我实际操作起来却可以呢)

大家好,如果您还对java静态方法可以覆写不太了解,没有关系,今天就由本站为大家分享java静态方法可以覆写的知识,包括为什么网上回答都说java中子类不能覆写父类中的静态方法,而我实际操作起来却可以呢的问题都会给大家分析到,还望可以解决大

2024年8月14日 04:40

asleep是什么意思(Asleep和Sleepy的区别)

asleep是什么意思(Asleep和Sleepy的区别)

本文目录Asleep和Sleepy的区别Asleep和Sleepy的区别它们各自的用法是什么asleep什么意思asleep的中文意思是什么Asleep和Sleepy的区别sleepy,asleep这两个形容词均含有“欲睡的”之意。区别在于

2024年7月2日 21:17

unity3d视频教程推荐(求unity 3d视频教程,最好是比较新的 ,5.x的)

unity3d视频教程推荐(求unity 3d视频教程,最好是比较新的 ,5.x的)

本篇文章给大家谈谈unity3d视频教程推荐,以及求unity 3d视频教程,最好是比较新的 ,5.x的对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站

2024年9月8日 01:30

connection(connection是什么意思)

connection(connection是什么意思)

本文目录connection是什么意思手机出现net::err_connection_reset翻译中文是什么意思connection是什么意思connection 常用词汇 英    n.联系;关系;连接;亲戚释义常用度分布图海词统计连

2024年7月22日 19:10

openssl漏洞复现(vmware esxi受到openssl漏洞影响 怎么修复)

openssl漏洞复现(vmware esxi受到openssl漏洞影响 怎么修复)

本文目录vmware esxi受到openssl漏洞影响 怎么修复Openssh升级漏洞修复vmware esxi受到openssl漏洞影响 怎么修复点击系统上的腾讯电脑管家应用程序界面,在工具箱中,点击修复漏洞按钮在漏洞修复界面中,展出可

2024年4月15日 01:50

学习 net(学习.net需要什么基础)

学习 net(学习.net需要什么基础)

本文目录学习.net需要什么基础学习.NET需要掌握哪些知识学习.NET,应该如何学习.net如何学习怎样零基础学习.net新手如何快速学习 .NET 学习.net需要什么基础C,C#,SQL,PB,.NET....之间的联系?,这样说吧,

2024年5月20日 15:31

女生学编程有前途吗(女生 学习 编程有前途吗)

女生学编程有前途吗(女生 学习 编程有前途吗)

本文目录女生 学习 编程有前途吗女生学习计算机编程技术就业情况女生学编程怎么样未来有发展前景吗女生现在学it编程有前途吗女生学习编程就业好不好呢女生学软件编程有前途吗女生学软件开发专业有发展前途吗女生学软件开发有前途吗转行IT行业,女生学编

2024年7月14日 19:10

wps下拉菜单怎么删除(wps如何取消下拉列表)

wps下拉菜单怎么删除(wps如何取消下拉列表)

本文目录wps如何取消下拉列表wps怎么把下拉菜单不隐藏wps手机上怎么把下拉框里的无去掉wps多级下拉列表数据怎么删除手机wps更改文件会把下拉菜单删除吗WPS表格怎么取消这个东西,烦死了,正好挡住下拉选项wps下拉列表如何删除重复值wp

2024年7月12日 20:51

docker过时了吗现在流行什么(开发者可以使用Docker做什么)

docker过时了吗现在流行什么(开发者可以使用Docker做什么)

“docker过时了吗现在流行什么”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看docker过时了吗现在流行什么(开发者可以使用Docker做什么)!本文目录开发者可以使用Docker做什么最近Docker挺流行的,它是啥

2024年9月6日 13:05

spyder运行代码不显示结果(tensorflow,mac使用spyder运行tensorflow代码,不显示问题却异常结束)

spyder运行代码不显示结果(tensorflow,mac使用spyder运行tensorflow代码,不显示问题却异常结束)

本文目录tensorflow,mac使用spyder运行tensorflow代码,不显示问题却异常结束在用spyder学python爬虫,发现有些网站的一些东西用审查元素查的到,但是打开源代码没有spyder输出结果的界面弄没了同一段代码在

2024年7月20日 07:47

if函数的使用方法两列比较(如何使用IF函数判断两列数据是否相同)

if函数的使用方法两列比较(如何使用IF函数判断两列数据是否相同)

本文目录如何使用IF函数判断两列数据是否相同如何用excel比较两列数据大小如何用excel比较两列数据大小(函数if)Excel 怎么比较两列文本是否相同Excel对比两列数据是否相同比较两列数据是否相同excel怎么对比两列数数据差异E

2024年7月21日 16:40

go语言编译器(Java与Go语言的学习成本相差多少)

go语言编译器(Java与Go语言的学习成本相差多少)

本文目录Java与Go语言的学习成本相差多少如果全世界所有的C语言编译器都在一夜之间被破坏,会发生什么go语言局部变量什么时候回收go语言是开源的,那go语言写的代码是否也需要开源中国为什么不做编译器和编程语言Java与Go语言的学习成本相

2024年6月23日 09:33

dirty什么意思(dirty这是什么意思)

dirty什么意思(dirty这是什么意思)

本文目录dirty这是什么意思dirty的中文意思dirty这是什么意思dirty 英 adj. 恶劣的;肮脏的;卑劣的;下流的 vt. 弄脏,污染;使名声受玷污 vi. 变脏,污染 ~如果你

2024年6月28日 22:11

学java到什么程度就可以去找工作了(自学java学多久可以自己找到工作)

学java到什么程度就可以去找工作了(自学java学多久可以自己找到工作)

本文目录自学java学多久可以自己找到工作java怎么自学呀自学到什么程度可以找工作java到底要学多久才能找工作啊java要学到什么什么程度才能参加工作自学java学多久可以自己找到工作如果你有足够的自制力,而且每天的学习时间都充足的话那

2024年6月13日 20:42

html制作百度搜索页面(高分求百度搜索HTML代码)

html制作百度搜索页面(高分求百度搜索HTML代码)

其实html制作百度搜索页面的问题并不复杂,但是又很多的朋友都不太了解高分求百度搜索HTML代码,因此呢,今天小编就来为大家分享html制作百度搜索页面的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录高分求百度搜

2024年9月8日 04:45

vb编程基础知识command(Vb中怎样添加command控件)

vb编程基础知识command(Vb中怎样添加command控件)

这篇文章给大家聊聊关于vb编程基础知识command,以及Vb中怎样添加command控件对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录Vb中怎样添加command控件vb中按command按钮如何使程序结束vb中comma

2024年9月6日 17:45

compileerror的意思(一个程序编译通过了 但在acm系统下提示compile error)

compileerror的意思(一个程序编译通过了 但在acm系统下提示compile error)

大家好,compileerror的意思相信很多的网友都不是很明白,包括一个程序编译通过了 但在acm系统下提示compile error也是一样,不过没有关系,接下来就来为大家分享关于compileerror的意思和一个程序编译通过了 但在

2024年8月24日 15:40

人工智能算法解决新挑战,智能算法是什么是如何运行的?人工智能算法是什么

人工智能算法解决新挑战,智能算法是什么是如何运行的?人工智能算法是什么

本文目录人工智能算法解决新挑战,智能算法是什么是如何运行的人工智能算法是什么智能算法的智能算法概述人工智能是什么 什么是人工智能算法智能算法有哪些哪里可以获取可用智能算法的matlab代码人工智能算法解决新挑战,智能算法是什么是如何运行的由

2024年7月24日 06:33

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1153
标签列表

热门搜索