
正文
顺序表主函数C语言 c顺序表的实现
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言数据结构顺序表选择排序怎么在主函数中调用,谢谢!
SeqList L;//L只是个默认构造,在后面执行基本是统一的0值;执行前应该设置实体数据
L=Selection(L.length);//改为L=Selection(L);原函数调用与函数定义不符,有语法错误;L.length是个int 类型,函数定义的参数类型是SeqList;
SeqList Selection(SeqList L) 内部逻辑不够简捷,多多练习;
if (L.data[j]L.data [i]){}//可直接交换,k标志没什么作用。
相关问答
Q1: c语言实现顺序表?
--顺序表.h
#includestdio.h
#includestdlib.h
#includemalloc.h
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FLASE 0
typedef int Elemtype;
typedef int Status;
/*接口定义
Status InitList_Sq(SqList L,int size,int inc);
void CreateList_Sq(SqList L);
void print_Sq(SqList L);
int Search_Sq(SqList L, Elemtype e);
Status DestroyList_Sq(SqList L);
Status ClearList_Sq(SqList L);
Status ListEmpty_Sq(SqList L);
int ListLength_Sq(SqList L);
Status GetElem_Sq(SqList L, int i, Elemtype e);
Status PutElem_Sq(SqList L, int i, Elemtype e);
Status Append_Sq(SqList L, Elemtype e);
Status DeleteLast_Sq(SqList L, Elemtype e);
*/
--------------------
#include "顺序表.h"
//定义顺序表类型
typedef struct {
Elemtype *elem;
int length;
int listsize;
int increment;
}SqList;
//初始化顺序表
Status InitList_Sq(SqList L,int size,int inc) {
L.elem = (Elemtype *)malloc(size * sizeof(Elemtype));
L.length = 0;
L.listsize = size;
L.increment = inc;
return TRUE;
}
//创建顺序表
Status CreateList_Sq(SqList L) {
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf_s("%d", L.length);
if (L.length = L.listsize) {
L.elem = (Elemtype *)realloc(L.elem, (L.listsize + L.increment) * sizeof(Elemtype));
}
if (!L.elem) {
return FLASE;
}
printf("请输入你要创建的顺序表:\n");
for (i = 0; iL.length; i++) {
scanf_s("%d", L.elem[i]);
}
}
//遍历顺序表
void print_Sq(SqList L) {
int i;
for (i = 0; iL.length; i++) {
printf("%4d", L.elem[i]);
}
}
//查找元素的位置
int Search_Sq(SqList L, Elemtype e) {
int i = 0;
while (L.elem[i] != eiL.length) {
i++;
}
if (iL.length)
return -1;
else
return i + 1;//因为C语言是从下标为0开始的,当i=0时表示第一个元素
}
//销毁顺序表
Status DestroyList_Sq(SqList L) {
if (L.elem == NULL)
return -1;
else
free(L.elem);
printf("\n销毁成功\n");
return TRUE;
}
//清空顺序表
Status ClearList_Sq(SqList L) {
if (L.elem == NULL)
exit(0);
int i;
Elemtype *p_elem = L.elem;
for (i = 0; iL.length; i++) {
*L.elem = NULL;
L.elem++;
}
L.elem = p_elem;
}
//判断顺序表是否为空
Status ListEmpty_Sq(SqList L) {
int i;
Elemtype* p_elem = L.elem;
for (i = 0; iL.length; i++) {
if (*L.elem != 0) {
L.elem = p_elem;
return FLASE;
}
L.elem++;
}
return TRUE;
}
//求顺序表的长度
int ListLength_Sq(SqList L) {
return L.length;
}
//用e返回顺序表L中第i个元素的值
Status GetElem_Sq(SqList L, int i, Elemtype e) {
int j;
Elemtype* p_elem = L.elem;
if (i1 || iL.length)
return FLASE;
for (j = 1; j = i; j++)
L.elem++;
e = *L.elem;
L.elem = p_elem;
return TRUE;
}
//将顺序表L中第i个元素赋值为e
Status PutElem_Sq(SqList L, int i, Elemtype e) {
L.elem[i - 1] = e;
return TRUE;
}
//在顺序表L表尾添加元素e
Status Append_Sq(SqList L, Elemtype e) {
L.elem[L.length] = e;
L.length++;
L.listsize += L.increment;
return TRUE;
}
//删除顺序表L表尾元素
Status DeleteLast_Sq(SqList L, Elemtype e) {
e = L.elem[L.length - 1];
L.length--;
return TRUE;
}
********************************************主函数.c*************************************************
#include stdio.h
#include stdlib.h
#include "顺序表.h"
#include "源代码.h"
//--------------------主函数入口--------------------
int main(){
SqList L;
int size, inc;
int e;
int a;
int length;
int i;
int temp;
int j=10;
int ee;
printf("\n--------------------顺序表初始化------------------\n");
printf("请输入顺序表的长度size以及扩容量:\n");
scanf_s("%d %d", size, inc);
InitList_Sq(L, size, inc);
CreateList_Sq(L);
printf("\n--------------------判断是否为空------------------\n");
if(ListEmpty_Sq(L)){
printf("该顺序表为空\n");
}
else
printf("该顺序表不为空\n");
printf("\n--------------------遍历顺序表--------------------\n");
printf("此时顺序表为:\n");
print_Sq(L);
printf("\n--------------------查找元素----------------------\n");
printf("\n请输入要查找的元素:\n");
scanf_s("%d",e);
a = Search_Sq(L, e);
printf("%d为第%d位:\n",e,a);
printf("\n--------------------输出长度----------------------\n");
length = ListLength_Sq(L);
printf("顺序表的长度为%d\n",length);
printf("\n----------将顺序表L中第i个元素赋值为temp----------\n");
printf("请输入第i个元素的i值和temp值:\n");
scanf_s("%d %d",i,temp);
PutElem_Sq(L, i, temp);
printf("\n此时顺序表为:\n");
print_Sq(L);
printf("\n---------------在顺序表表尾添加元素---------------\n");
Append_Sq(L, j);
printf("\n此时顺序表为:\n");
print_Sq(L);
printf("\n---------------在顺序表表尾删除元素---------------\n");
DeleteLast_Sq(L, ee);
printf("\n被删除的元素为%d\n",ee);
printf("此时顺序表为:\n");
print_Sq(L);
printf("\n-------------------清空顺序表---------------------\n");
ClearList_Sq(L);
if(ListEmpty_Sq(L)){
printf("\n清空成功\n");
}
printf("\n------------------销毁顺序表----------------------\n");
DestroyList_Sq(L);
getchar();
getchar();
return 0;
}
Q2: 顺序表和链表的基本操作,用C语言实现!
顺序存储的线性表的算法
#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);
}
这些内容不知道能不能帮助到你。
Q3: 求用C语言写这个顺序表的主函数
完整代码:
#include stdio.h
#include stdlib.h
#include windows.h
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;
void init(sequence_list *slt)
{
slt-size=0;
}
void append(sequence_list *slt,datatype x)
{
if(slt-size==MAXSIZE)
{
printf("顺序表是满的");
exit(1);
}
slt-a[slt-size]=x;
slt-size=slt-size+1;
}
void display (sequence_list slt)
{
int i;
if(!slt.size)
printf("顺序表是空的");
else
for(i=0;islt.size;i++)
printf("%5d",slt.a[i]);
printf("\n");
}
int empty (sequence_list *slt)
{
memset(slt,0,sizeof(sequence_list));
return(slt-size==0?1:0);
}
int find (sequence_list slt,datatype x)
{
int i=0;
while(islt.size slt.a[i]!=x)
i++;
return(islt.size ? i:-1);
}
datatype get(sequence_list slt,int i)
{
if(i0||i=slt.size)
{
printf("\n指定位置的节点不存在");
exit(1);
}
else
return slt.a[i];
}
void insert(sequence_list *slt,datatype x,int position)
{
int i;
if(slt-size==MAXSIZE)
{
printf("\n顺序表是满的,无法插入");
exit(1);
}
if(position0||positionslt-size)
{
printf("\n指定的插入位置不存在");
exit(1);
}
for(i=slt-size;iposition;i--)
slt-a[i]=slt-a[i-1];
slt-a[position]=x;
slt-size++;
}
void dele(sequence_list *slt,int position)
{
int i;
if(slt-size==0)
{
printf("\n顺序表是空的,无法删除");
exit(1);
}
if(position0||position=slt-size)
{
printf("\n指定的删除位置不存在");
exit(1);
}
for(i=position;islt-size-1;i++)
slt-a[i]=slt-a[i+1];
slt-size--;
}
int main()
{
sequence_list slt;
bool exit_flag=false;
int fun_num=1;
datatype data=0;
int i=0;
printf("1.初始化 2.增加节点 3.显示 4.清空 5.查找\n6.获取节点 7.插入节点 8.删除节点 9.退出 0.清屏\n");
while (!exit_flag)
{
printf("请选择功能:\n");
scanf("%d",fun_num);
switch (fun_num)
{
case 1:
init(slt);
break;
case 2:
printf("请输入数据:\n");
scanf("%d",data);
append(slt,data);
break;
case 3:
display (slt);
break;
case 4:
empty (slt);
break;
case 5:
printf("请输入查找的数据:\n");
scanf("%d",data);
printf("查找到的数据位置为:%d",find (slt,data));
printf("\n");
break;
case 6:
printf("请输入数据位置:\n");
scanf("%d",i);
printf("该位置的数据为:%d",get(slt,i));
printf("\n");
break;
case 7:
printf("请输入插入节点位置:\n");
scanf("%d",i);
printf("请输入插入节点数据:\n");
scanf("%d",data);
insert(slt,data,i);
break;
case 8:
printf("请输入删除节点位置:\n");
scanf("%d",i);
dele(slt,i);
break;
case 9:
exit_flag=true;
break;
case 0:
system("CLS");
printf("1.初始化 2.增加节点 3.显示 4.清空 5.查找\n6.获取节点 7.插入节点 8.删除节点 9.退出 0.清屏\n");
break;
default:
break;
}
}
return 0;
}
效果如下图,调试通过,所有功能好使
顺序表主函数C语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c顺序表的实现、顺序表主函数C语言的信息别忘了在本站进行查找喔。






