顺序表C语言代码实现
2009-10-19 09:54
513 查看
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
/****************************************
* 结构体的声明 *
****************************************/
typedef struct std_info
{
int Num;
char Name[8];
float Score;
}ElemType;
/****************************************
* 头指针的定义 *
****************************************/
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SeqList;
/****************************************
* 创建链表 *
****************************************/
void Create_SeqList(SeqList *L1)
{
int i,n;
int num;
char name[8];
float score;
printf("请输入顺序表的长度:/n");
scanf("%d",&n);
L1->length=n;
for(i=1;i<=L1->length;i++)
{
printf("请输入一个学生的信息:Num,Name,Score/n");
scanf("%d",&num);
scanf("%s",name);
scanf("%f",&score);
getchar();
L1->elem[i].Num=num;
strcpy(L1->elem[i].Name,name);
L1->elem[i].Score=score;
}
}
/****************************************
* 链表输出 *
****************************************/
void Printf_SeqList(SeqList *L1)
{
int i;
printf("/t/t***Printf_SeqList***/n");
printf("Num/tName/t/tScore/n");
for(i=1;i<=L1->length;i++)
{
printf("%d/t%s/t/t%f/n",L1->elem[i].Num,L1->elem[i].Name,L1->elem[i].Score);
}
printf("/n");
}
/****************************************
* 链表-插入 *
****************************************/
int Insert_SeqList(SeqList *L1,int i,ElemType elemtype)
{
int j;
if(L1->length==MAXSIZE-1)
{
printf("Surface/n");
return (-1);
}
if(i<1||i>L1->length+2)
{
printf("position error/n");
return (0);
}
for(j=L1->length;j>=i-1;j--)
{
L1->elem[j+1]=L1->elem[j];
}
L1->elem[i-1]=elemtype;
L1->length++;
return (1);
}
/****************************************
* 链表-删除 *
****************************************/
int Delete_SeqList(SeqList *L1,int i)
{
int j;
if(i<1||i>L1->length+1)
{
printf("The elem doesn't i/n");
return (0);
}
for(j=i;j<L1->length;j++)
{
L1->elem[j-1]=L1->elem[j];
}
L1->length--;
return (1);
}
/****************************************
* 链表-逆置 *
****************************************/
int Inversion_SeqList(SeqList *L1)
{
int i,j;
ElemType temp;
for(i=1,j=L1->length;i<j;i++,j--)
{
temp=L1->elem[i];
L1->elem[i]=L1->elem[j];
L1->elem[j]=temp;
}
return 1;
}
/****************************************
* 链表-排序 *
****************************************/
int Sort_SeqList(SeqList *L1)
{
int i,j;
ElemType temp;
for(j=1;j<=L1->length-1;j++)
for(i=1;i<=L1->length-j;i++)
{
if(L1->elem[i].Num>L1->elem[i+1].Num)
{
temp=L1->elem[i];
L1->elem[i]=L1->elem[i+1];
L1->elem[i+1]=temp;
}
}
return 1;
}
/****************************************
* 链表-顺序插入 *
****************************************/
int Insert1_SeqList(SeqList *L1,ElemType elemtype)
{
int i;
if(L1->length==MAXSIZE-1)
{
printf("表满/n");
}
++L1->length;
for(i=L1->length-1;L1->elem[i].Num>elemtype.Num;i--)
L1->elem[i+1]=L1->elem[i];
L1->elem[i+1]=elemtype;
return 1;
}
/****************************************
* 链表-删除i以后k个元素 *
****************************************/
int Delete1_SeqList(SeqList *L1,int i,int k)
{
int j;
if(i<1||k<0||i+k-1>L1->length-1)
{
printf("删除位置错误/n");
return (0);
}
for(j=1;i+j-1<=i+k;j++)
{
L1->elem[i+j-1]=L1->elem[i+j];
}
return 1;
}
/****************************************
* 链表操作 *
****************************************/
void Print(SeqList *L1)
{
int i,j=1,k;
int num;
char name[8];
float score;
ElemType elemtype;
printf("/t&&Please select the operation of the table&&/n");
while(j)
{
printf("***********************************************************/n");
printf("*/t1.The order of the table insert/n");
printf("*/t2.The order of the table delete/n");
printf("*/t3.The order of the table Inversion(逆置)/n");
printf("*/t4.The order of the table sort /n");
printf("*/t5.插入一个学生信息放入递增排序的顺序表适当位置/n");
printf("*/t6.删除第i个元素后的k个元素/n");
printf("*/t0.Exit/n");
printf("*************************************************************/n");
scanf("%d",&j);
switch(j)
{
case 0:
printf("Bye-Bye ..../n");
exit(1);
break;
case 1:
printf("Please input one student massege:Num,Name,Score/n");
scanf("%d",&num);
scanf("%s",name);
scanf("%f",&score);
getchar();
printf("Please input number to Insert_SeqList/n");
scanf("%d",&i);
elemtype.Num=num;
strcpy(elemtype.Name,name);
elemtype.Score=score;
i=Insert_SeqList(L1,i,elemtype);
Printf_SeqList(L1);
printf("OK/n");
break;
case 2:
printf("Please enter the Location you want to delete/n");
scanf("%d",&i);
i=Delete_SeqList(L1,i);
Printf_SeqList(L1);
printf("OK/n");
break;
case 3:
Inversion_SeqList(L1);
Printf_SeqList(L1);
printf("OK/n");
break;
case 4:
Sort_SeqList(L1);
Printf_SeqList(L1);
printf("OK/n");
break;
case 5:
printf("Please you input one student Num Name Score/n");
scanf("%d",&num);
scanf("%s",name);
scanf("%f",&score);
elemtype.Num=num;
strcpy(elemtype.Name,name);
elemtype.Score=score;
Insert1_SeqList(L1,elemtype);
Printf_SeqList(L1);
printf("OK/n");
break;
case 6:
printf("Please input i and delete i last k number/n");
scanf("%d",&i);
scanf("%d",&k);
Delete1_SeqList(L1,i,k);
Printf_SeqList(L1);
printf("OK/n");
break;
default :printf("Input error,Retype number/n");
}
}
}
void main()
{
SeqList *L=(SeqList *)malloc(sizeof(SeqList));
Create_SeqList(L);
Printf_SeqList(L);
Print(L);
free(L);
}
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
/****************************************
* 结构体的声明 *
****************************************/
typedef struct std_info
{
int Num;
char Name[8];
float Score;
}ElemType;
/****************************************
* 头指针的定义 *
****************************************/
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}SeqList;
/****************************************
* 创建链表 *
****************************************/
void Create_SeqList(SeqList *L1)
{
int i,n;
int num;
char name[8];
float score;
printf("请输入顺序表的长度:/n");
scanf("%d",&n);
L1->length=n;
for(i=1;i<=L1->length;i++)
{
printf("请输入一个学生的信息:Num,Name,Score/n");
scanf("%d",&num);
scanf("%s",name);
scanf("%f",&score);
getchar();
L1->elem[i].Num=num;
strcpy(L1->elem[i].Name,name);
L1->elem[i].Score=score;
}
}
/****************************************
* 链表输出 *
****************************************/
void Printf_SeqList(SeqList *L1)
{
int i;
printf("/t/t***Printf_SeqList***/n");
printf("Num/tName/t/tScore/n");
for(i=1;i<=L1->length;i++)
{
printf("%d/t%s/t/t%f/n",L1->elem[i].Num,L1->elem[i].Name,L1->elem[i].Score);
}
printf("/n");
}
/****************************************
* 链表-插入 *
****************************************/
int Insert_SeqList(SeqList *L1,int i,ElemType elemtype)
{
int j;
if(L1->length==MAXSIZE-1)
{
printf("Surface/n");
return (-1);
}
if(i<1||i>L1->length+2)
{
printf("position error/n");
return (0);
}
for(j=L1->length;j>=i-1;j--)
{
L1->elem[j+1]=L1->elem[j];
}
L1->elem[i-1]=elemtype;
L1->length++;
return (1);
}
/****************************************
* 链表-删除 *
****************************************/
int Delete_SeqList(SeqList *L1,int i)
{
int j;
if(i<1||i>L1->length+1)
{
printf("The elem doesn't i/n");
return (0);
}
for(j=i;j<L1->length;j++)
{
L1->elem[j-1]=L1->elem[j];
}
L1->length--;
return (1);
}
/****************************************
* 链表-逆置 *
****************************************/
int Inversion_SeqList(SeqList *L1)
{
int i,j;
ElemType temp;
for(i=1,j=L1->length;i<j;i++,j--)
{
temp=L1->elem[i];
L1->elem[i]=L1->elem[j];
L1->elem[j]=temp;
}
return 1;
}
/****************************************
* 链表-排序 *
****************************************/
int Sort_SeqList(SeqList *L1)
{
int i,j;
ElemType temp;
for(j=1;j<=L1->length-1;j++)
for(i=1;i<=L1->length-j;i++)
{
if(L1->elem[i].Num>L1->elem[i+1].Num)
{
temp=L1->elem[i];
L1->elem[i]=L1->elem[i+1];
L1->elem[i+1]=temp;
}
}
return 1;
}
/****************************************
* 链表-顺序插入 *
****************************************/
int Insert1_SeqList(SeqList *L1,ElemType elemtype)
{
int i;
if(L1->length==MAXSIZE-1)
{
printf("表满/n");
}
++L1->length;
for(i=L1->length-1;L1->elem[i].Num>elemtype.Num;i--)
L1->elem[i+1]=L1->elem[i];
L1->elem[i+1]=elemtype;
return 1;
}
/****************************************
* 链表-删除i以后k个元素 *
****************************************/
int Delete1_SeqList(SeqList *L1,int i,int k)
{
int j;
if(i<1||k<0||i+k-1>L1->length-1)
{
printf("删除位置错误/n");
return (0);
}
for(j=1;i+j-1<=i+k;j++)
{
L1->elem[i+j-1]=L1->elem[i+j];
}
return 1;
}
/****************************************
* 链表操作 *
****************************************/
void Print(SeqList *L1)
{
int i,j=1,k;
int num;
char name[8];
float score;
ElemType elemtype;
printf("/t&&Please select the operation of the table&&/n");
while(j)
{
printf("***********************************************************/n");
printf("*/t1.The order of the table insert/n");
printf("*/t2.The order of the table delete/n");
printf("*/t3.The order of the table Inversion(逆置)/n");
printf("*/t4.The order of the table sort /n");
printf("*/t5.插入一个学生信息放入递增排序的顺序表适当位置/n");
printf("*/t6.删除第i个元素后的k个元素/n");
printf("*/t0.Exit/n");
printf("*************************************************************/n");
scanf("%d",&j);
switch(j)
{
case 0:
printf("Bye-Bye ..../n");
exit(1);
break;
case 1:
printf("Please input one student massege:Num,Name,Score/n");
scanf("%d",&num);
scanf("%s",name);
scanf("%f",&score);
getchar();
printf("Please input number to Insert_SeqList/n");
scanf("%d",&i);
elemtype.Num=num;
strcpy(elemtype.Name,name);
elemtype.Score=score;
i=Insert_SeqList(L1,i,elemtype);
Printf_SeqList(L1);
printf("OK/n");
break;
case 2:
printf("Please enter the Location you want to delete/n");
scanf("%d",&i);
i=Delete_SeqList(L1,i);
Printf_SeqList(L1);
printf("OK/n");
break;
case 3:
Inversion_SeqList(L1);
Printf_SeqList(L1);
printf("OK/n");
break;
case 4:
Sort_SeqList(L1);
Printf_SeqList(L1);
printf("OK/n");
break;
case 5:
printf("Please you input one student Num Name Score/n");
scanf("%d",&num);
scanf("%s",name);
scanf("%f",&score);
elemtype.Num=num;
strcpy(elemtype.Name,name);
elemtype.Score=score;
Insert1_SeqList(L1,elemtype);
Printf_SeqList(L1);
printf("OK/n");
break;
case 6:
printf("Please input i and delete i last k number/n");
scanf("%d",&i);
scanf("%d",&k);
Delete1_SeqList(L1,i,k);
Printf_SeqList(L1);
printf("OK/n");
break;
default :printf("Input error,Retype number/n");
}
}
}
void main()
{
SeqList *L=(SeqList *)malloc(sizeof(SeqList));
Create_SeqList(L);
Printf_SeqList(L);
Print(L);
free(L);
}
相关文章推荐
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
- C语言实现动态顺序表的实现代码
- C语言实现顺序表的所有操作代码
- c语言部分库函数,代码实现,以及细节理解
- 简单易懂的C语言实现双向链表代码
- c语言中顺序表的实现
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- 静态顺序表(C语言实现)
- [数字信号处理]单位冲击响应与频响以及FIR实现代码(C语言)
- 知识点13:手写代码-倒转链表的c语言实现
- 批量获取memcache值并按key的顺序返回的实现代码
- <C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
- C语言实现任意进制的转换,主要注意代码的小技巧
- 关于顺序表的C语言实现
- 吊死鬼游戏Hangman游戏的C语言实现代码
- 树的三种遍历方法代码实现 (数据结构)C语言
- c语言的线性表的顺序存储的实现,数组
- 马尔可夫链算法(markov算法)的awk、C++、C语言实现代码
- C语言实现括号匹配,中缀表达式转后缀表达式并计算具体代码实现
- [数字信号处理]单位冲击响应与频响以及FIR实现代码(C语言)