数据结构-顺序表
重新学习了一下数据结构,简单的写了一个关于学院名称和电话号码的顺序表,希望能给才接触数据结构的同学一点帮助
代码如下附上:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MAXSIZE 20
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int Status;
typedef struct{
char CName[20];
char Tel[9];
}ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList_Sq(SqList &L)//初始化顺序表
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) return FALSE;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
Status Create_Sq(SqList &L)//创建顺序表
{
int i,n;
printf("请输入顺序表的长度:\n");
scanf("%d",&n);
getchar();
if(n>LIST_INIT_SIZE)
return ERROR;
L.length=n;
for(i=0;i<n;i++)
{
printf("请输入院系名称:\n");
gets(L.elem[i].CName);
printf("请输入电话号码:\n");
gets(L.elem[i].Tel);
}
return OK;
}
Status Insert_Sq(SqList &L,int i,ElemType e)//对信息进行插入操作
{
ElemType *newbase;
ElemType *p,*q;
if(i>L.length+1||i<0)
return ERROR;
if(L.length>L.listsize)
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
return FALSE;
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
{
*(p+1)=*p;
}
*q=e;
++L.length;
return OK;
}
Status Delete_Sq(SqList &L,int i,ElemType &e)//删除第i位的信息
{
int j;
if(i<0||i>L.length-1)
return ERROR;
e=L.elem[i];
for(j=i;j<L.length-1;j++)
{
L.elem[j]=L.elem[j+1];
}
--L.length;
return OK;
}
Status Print_Sq(SqList &L)//打印顺序表中的信息
{
int i;
printf("顺序表的内容为:\n");
for(i=0;i<L.length;i++)
printf("学院=%s,电话号码=%s\n",L.elem[i].CName,L.elem[i].Tel);
return OK;
}
Status Locate_Sq(SqList L,ElemType e)//通过学院名进行查找
{
int i=0;
for(i=0;i<L.length;i++)
{
if(strcmp(L.elem[i].CName,e.CName)==0)
return i+1;
}
return OK;
}
int main()
{
ElemType now;
//声明变量
int i;
int j=1;
SqList L1;
InitList_Sq(L1);
//初始化线性表并给若干元素赋值
Create_Sq(L1);
Print_Sq(L1);
//打印电话簿
while(j) /*功能菜单*/
{ printf("顺序表操作! \n 请输入一个0到3的整数,选择您的操作\n");
printf("1: 顺序表插入\n");
printf("2: 顺序表删除\n");
printf("3: 顺序表查找\n");
printf("0: 退出程序\n");
scanf("%d",&j);
switch(j)
{ case 0: printf("退出程序\n");return 0;
case 1: /*首先要输入插入位置和待插入学院的信息*/
printf("请输入插入的位置:");
scanf("%d",&i);
getchar();
printf("请输入待插入学院的名称:");
scanf("%s",now.CName);
getchar();
printf("请输入待插入学院的电话:");
scanf("%s",now.Tel);
getchar();
Insert_Sq(L1,i,now);
//调用函数进行插入
Print_Sq(L1);
//打印插入后的电话簿
break;
case 2: printf("请输入要删除的学院信息在顺序表中的位置(整数)\n");
scanf("%d",&i);
//调用函数进行删除
Delete_Sq(L1,i,now);
//打印删除后的电话簿
Print_Sq(L1);
break;
case 3:
printf("请输入要查找的院系名称:");
scanf("%s",now.CName);
i=Locate_Sq(L1,now);
if(i==0)
printf("查找院系不存在!");
else
printf("位于顺序表的第%d位\n",i);
//调用函数进行查找,并输出查找结果
break;
default: printf("输入错误,请重新输入!\n");
}
}
}
运行截图如下:
创建顺序表:
对顺序表进行信息增加、删除和查找: