C语言实现顺序表基本操作汇总_C 语言

本文汇总了C语言下实现及操作顺序表的方法,对于学习数据结构的朋友来说是一个不错的参考程序。完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#define TRUE  1
#define FALSE 0
#define OK   1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int status ;
typedef int ElemType ;
typedef struct{
 ElemType *elem;
 int length,listsize;
}SqList;
status InitList(SqList &L)//初始化
{
 L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
 if(!L.elem) exit(OVERFLOW);
 L.listsize=LIST_INIT_SIZE;
 L.length=0;
 return OK;
}
status Build(SqList &L)//建立表
{
 int i,n;
 printf("请输入元素个数n和n个元素\n");
 scanf("%d",&n);
 if(n>LIST_INIT_SIZE)//如果n大于当前空间
 {
 L.elem=(ElemType *)realloc(L.elem,(n+LISTINCREMENT)*sizeof(ElemType));
 if(!L.elem) exit(OVERFLOW);
 L.listsize=n+LISTINCREMENT;
 }
 for(i=0;i<n;i++)
 scanf("%d",L.elem+i);
 L.length=n;
 return OK;
}
void Print(SqList &L)//输出表中元素和长度
{
 int i;
 for(i=0;i<L.length;i++)
 printf("%d ",*(L.elem+i));
 printf("\n长度为:%d\n\n",L.length);
}
void Tips()//提示函数
{
 printf("请选择你的想要的操作:\n");
 printf("<1> 输出顺序表及顺序表的长度\n");
 printf("<2> 删除值为x的结点\n");
 printf("<3> 删除给定位置i的结点\n");
 printf("<4> 将顺序表逆置\n");
 printf("<5> 将顺序表按升序排序\n");
 printf("<6> 将x插入到顺序表的适当位置上\n");
 printf("<7> 将两个有序表合并\n");
 printf("<0> 退出\n\n");
}
status ListDelete1(SqList &L,int x)//删除值为X的元素
{
 int i;
 for(i=0;i<L.length;i++)
 if(*(L.elem+i)==x)
  break;
 if(i==L.length)
 return ERROR;
 for(i++;i<L.length;i++)
 *(L.elem+i-1)=*(L.elem+i);
 L.length--;
 return OK;
}
status ListDelete2(SqList &L,int x)//删除第X个元素
{
 int i;
 if(x<0||x>=L.length)
 return ERROR;
 for(i=x+1;i<L.length;i++)
 *(L.elem+i-1)=*(L.elem+i);
 L.length--;
 return OK;
}
void Inverse(SqList &L)//逆置函数
{
 int i,t;
 for(i=0;i<L.length/2;i++)
 {
 t=*(L.elem+i);
 *(L.elem+i)=*(L.elem+L.length-i-1);
 *(L.elem+L.length-i-1)=t;
 }
}
void Sort(SqList &L)//冒泡排序(升序)
{
 int i,j,t;
 for(i=1;i<L.length;i++)
 for(j=0;j<L.length-i;j++)
 {
  if(*(L.elem+j)>*(L.elem+j+1))
  {
   t=*(L.elem+j);
   *(L.elem+j)=*(L.elem+j+1);
   *(L.elem+j+1)=t;
  }
 }
 printf("已按升序排列\n\n");
}
status ListInsert(SqList &L,int x)//将X插入,使仍然有序
{
 int i,k;
 if(L.length>=L.listsize)
 {
 L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
 if(!L.elem) exit(OVERFLOW);
 L.listsize+=LISTINCREMENT;
 }
 for(i=0;i<L.length;i++)
 if(x<*(L.elem+i))
  break;
 k=i;
 for(i=L.length;i>k;i--)
 *(L.elem+i)=*(L.elem+i-1);
 *(L.elem+k)=x;
 L.length++;
 return OK;
}
status Merger(SqList &L,SqList &Lb)//合并两个线性表
{
 int i,j,k;
 SqList Lc;
 InitList(Lc);
 if(Lc.listsize<L.length+Lb.length)
 {
 Lc.elem=(ElemType *)realloc(Lc.elem,(L.length+Lb.length+LISTINCREMENT)*sizeof(ElemType));
 if(!L.elem) exit(OVERFLOW);
 Lc.listsize=L.length+Lb.length+LISTINCREMENT;
 }
 i=j=k=0;
 while(i<L.length && j<Lb.length)
 {
 if(*(L.elem+i) < *(Lb.elem+j))
 {
  *(Lc.elem+k)=*(L.elem+i);
  k++;i++;
 }
 else
 {
  *(Lc.elem+k)=*(Lb.elem+j);
  k++;j++;
 }
 }
 while(i<L.length)
 {
 *(Lc.elem+k)=*(L.elem+i);
 k++;i++;
 }
 while(j<Lb.length)
 {
 *(Lc.elem+k)=*(Lb.elem+j);
 k++;j++;
 }
 Lc.length=L.length+Lb.length;
 L=Lc;
 return OK;
}
int main()
{
 int op,x,flag;
 SqList L,Lb;
 InitList(L);
 Build(L);
 Tips();
 scanf("%d",&op);
 while(op)
 {
 switch(op)
 {
 case 1:
  Print(L);
  break;
 case 2:
  printf("请输入要删除的数据X:\n");
  scanf("%d",&x);
  flag=ListDelete1(L,x);
  if(flag)
  printf("删除成功!!\n\n");
  else
  printf("元素不存在,删除失败!!\n\n");
  break;
 case 3:
  printf("请输入要删除的位置i:\n");
  scanf("%d",&x);
  flag=ListDelete2(L,x-1);//第i个元素对应的下标为i-1
  if(flag)
  printf("删除成功!!\n\n");
  else
  printf("元素不存在,删除失败!!\n\n");
  break;
 case 4:
  Inverse(L);
  break;
 case 5:
  Sort(L);
  break;
 case 6:
  printf("请输入要插入的数据X:\n");
  scanf("%d",&x);
  flag=ListInsert(L,x);
  if(flag)
  printf("插入成功!!\n\n");
  else
  printf("插入失败!!\n\n");
  break;
 case 7:
  printf("请输入Lb的内容:\n");
  InitList(Lb);
  Build(Lb);
  flag=Merger(L,Lb);
  if(flag)
  printf("合并成功!!\n\n");
  break;
 }
  Tips();
  scanf("%d",&op);
 }
 return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
顺序表
顺序表c语言实现、c语言顺序表的实现、c语言顺序表、c语言建立顺序表、c语言顺序表的建立,以便于您获取更多的相关知识。

时间: 2024-09-01 21:10:27

C语言实现顺序表基本操作汇总_C 语言的相关文章

C++实现顺序表的方法_C 语言

废话不多说了,直接给大家上关键代码了. #pragma once #include <assert.h> template<class T> class SeqList { public: SeqList() :_a(NULL) ,_size(1) ,_capacity(1) {} SeqList(T* a, size_t size) :_a(new T[size]) ,_size(size) ,_capacity(size) { for (size_t i = 0; i <

C语言单链表常见操作汇总_C 语言

C语言的单链表是常用的数据结构之一,本文总结了单链表的常见操作,实例如下: #include<stdio.h> #include<stdlib.h> //定义单链表结构体 typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //创建单链表 void Build(LinkList L) { int n; LinkList p,q; p=L; pr

C语言中进制知识汇总_C 语言

1.什么是进制 进制是一种计数的方式,常用的有二进制.八进制.十进制.十六进制.任何数据在计算机内存中都是以二进制的形式存放的. 我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数:八进制数是以8为计算单元,满8进1位的数. 对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC. 2.进制的转换规则 遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数18为例,对1-18中每一个数值转换各种进制做一

C语言顺序表基本操作,刚学数据结构还不懂怎么操作?求助!!

问题描述 C语言顺序表基本操作,刚学数据结构还不懂怎么操作?求助!! 1.建立一个顺序表,要求从键盘输入10个整数,并将该顺序表的元素从屏幕显示出来. 2.用函数实现在顺序表中查找其中一个元素,如果找到,返回该元素在顺序表中的位置和该元素的值,否则提示无此元素. 3.用函数实现顺序表的插入和删除操作.由用户输入待插入元素及插入位置,将完成插入后的顺序表输出:由用户输入删除第几个元素,将完成删除后的顺序表输出. 解决方案 http://zhidao.baidu.com/link?url=n-XCi

利用C语言实现顺序表的实例操作_C 语言

本文实例讲述了C语言实现顺序表(线性表)的方法.分享给大家供大家参考,具体如下: 一:顺序表代码实现 #ifndef _SEQ_LIST_H #define _SEQ_LIST_H #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define ElemType float //以float类型测试算法通用性,而不是以惯用的int #define I

c语言实现顺序表的基本操作_C 语言

数据结构顺序表操作 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LIST_INIT_SIZE 100#define LISINCREMENT 10#define ElemType int#define Status inttypedef struct Sq{ ElemType *elem; int length; int listsize;}SqList;Statu

基于C++实现的各种内部排序算法汇总_C 语言

提起排序算法相信大家都不陌生,或许很多人已经把它们记得滚瓜烂熟,甚至随时可以写出来.是的,这些都是最基本的算法.这里就把各种内部排序算法总结归纳了一下,包括插入排序(直接插入排序,折半插入排序,希尔排序).交换排序(冒泡排序,快速排序).选择排序(简单选择排序,堆排序).2-路归并排序.(另:至于堆排序算法,前面已经有一篇文章针对堆排序的算法实现做了详细的描述) C++实现代码如下: /*******************************************************

一波C语言二元查找树算法题目解答实例汇总_C 语言

按层次遍历二元树问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印.  例如输入: 8 / / 6 10 / / / / 5 7 9 11 输出 8 6 10 5 7 9 11           定义二元树(其实是二元搜索树,但并不遍历算法)的结点为: struct BSTreeNode { int value; BSTreeNode *left; BSTreeNode *right; };       思路:利用队列的先进先出,很容易实现.每次取出队列的首

数据结构 语言-关于顺序表操作的问题

问题描述 关于顺序表操作的问题 输入一组整形元素序列,建立顺序表.要求:(1)实现顺序表的遍历.查找.插入.删除:(2)实现将顺序表中所有奇数排在偶数之前,表的前面为奇数,后面为偶数: 解决方案 java实现: 这个顺序表可以封装两个TreeSet,一个放奇数,一个放偶数.遍历: 返回两个set的集合,先返回骑术的,再返回偶数的.查找: 先判断奇偶,然后直接到set里查,so easy.插入: 先判断奇偶,然后add到对应的set.删除: 同理. 解决方案二: http://blog.csdn.