admin 管理员组文章数量: 887006
基于C语言的线性表操作,包含单链表和顺序线性表两种类型
用了四天的闲余时间,终于写完了线性表的顺序和链式两种结构的代码,进度有些慢,因为的确遇到了一些问题,也学到了一些知识,上传代码,同时代码同步更新到我创建的项目里,欢迎指出代码或者算法等等的不足和修改意见!
项目链接:
/*顺序存储结构的线性表操作函数*/
#include<stdio.h>
#include<stdbool.h>
#define MAXSIZE 100
#define OK 0
#define ERROR 1typedef int Status;
typedef int ElemType;typedef struct{ElemType data[MAXSIZE];int Length;
} SqList;Status InitList(SqList *L) //初始化一个sq线性表
{L->Length = 0;return OK;
}Status ListInsert(SqList *L,int i,ElemType e)//在线性表L中第i个位置插入新元素e
{int j;if( i<1 || i>L->Length+1 ){return ERROR;}if(L->Length+1 > MAXSIZE){return ERROR;}for( j=L->Length; j>i-1 ;j-- ){L->data[j] = L->data[j-1];}L->data[i-1] = e;L->Length++;return OK;
}bool ListEmpty(SqList L) //判断线性表是否为空表
{return !(bool)L.Length;
}void printList(SqList L)//打印顺序线性表
{int i;if(L.Length == 0){printf("List is Empty!");}printf("\n");for( i=0; i<L.Length; i++ ){printf("%d ",L.data[i]);}printf("\n");printf("\n");
}Status ClearList(SqList *L) //清空线性表
{/*int i;for( i=0; i<L->Length; i++){L->data[i] = 0} */ //其实这个for循环可以不用写L->Length = 0; return OK;
}Status GetElem(SqList L, int i, ElemType *e) //取线性表L中第i个元素赋值给e
{if( i<1 || i>L.Length ){return ERROR;}*e = L.data[i-1];return OK;
}Status LocateElem(SqList L, ElemType e) //在线性表L中定位元素e
{int i;if(L.Length == 0){return 0;}for( i=0; i < L.Length; i++){if(L.data[i] == e){return i+1;}}return 0;
}Status ListLength(SqList L)
{return L.Length;
}Status ListDelete(SqList *L, int i, ElemType *e)
{int j;if( i<1 || i>L->Length ) //这里不用判断是否为空表{ //因为是空表的话,L->Length为0return ERROR; //小于1或大于0包含了全体实数,所以是空表必然返回ERROR}*e = L->data[i-1]; for( j=i-1; j < L->Length-1; j++ ){L->data[j] = L->data[j+1];}L->Length--;return OK;
}
/*顺序存储结构的主函数*/
#include</home/linux/ds&a/list/sequence/Sequence.c> //这里需要填写sequence.c文件的绝对路径
#define MAXLIST 10void main()
{SqList s[MAXLIST];//注意,不同链表的数据类型不一样int m = 0; //创建的线性表数目int n = 0; //选定的线性表int d = 0; //选定的操作int i = 0; //线性表中的位置int e = 0; //线性表中的数据while(1){printf("1:创建线性表\n");printf("2:操作线性表\n");printf("0:退出系统!\n\n");printf("请输入操作代码:");while( scanf("%d",&d)== 0 ){getchar();printf("输入格式错误,请重新输入:"); }getchar();if ( 0 == d ) //0:退出系统{break;}else if ( 1 == d ) //1:创建线性表{if( m >= MAXLIST ){printf("\t\t\t已达到最大可创建的线性表数目,创建失败!\n");continue;}InitList( &s[m] );printf("\t\t\t编号为%d的线性表已被创建!\n",m+1);m++;}else if( 2 == d ) //2:操作线性表{if( m == 0){printf("\t\t\t还没有线性表被创建,请先创建线性表!\n");continue;}printf("\n请输入要操作的线性表代码,返回主菜单,请输入0:");while(scanf("%d",&n) == 0){getchar();printf("输
本文标签: 基于C语言的线性表操作,包含单链表和顺序线性表两种类型
版权声明:本文标题:基于C语言的线性表操作,包含单链表和顺序线性表两种类型 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732356841h1534670.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论