线性表的顺序表示和实现:
#include <string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
typedef int Status;//起别名
#define OK 1
#define ERROR 0
#define OVERLOW -2
#define MAXSIZE 10
//书结构体
typedef struct Book{
char name[20];
char no[20];
}Book;
//顺序表
typedef struct{
Book *elem;//数据
int length;//长度
}SqList;
//初始化
Status InitList(SqList &L){
L.elem= new Book[MAXSIZE];
if(!L.elem) exit(OVERLOW);
L.length=0;
return OK;
}
//菜单
void menu(){
printf("\t\t\t 1:创建并初始化先前列表:\n");
printf("\t\t\t 2:查找\n");
printf("\t\t\t 3:删除\n");
printf("\t\t\t 4:插入\n");
printf("\t\t\t 5:取值\n");
printf("\t\t\t 6:输出\n");
printf("\t\t\t 7:退出\n");
}
//声明
void creatSqlist(SqList &L,Book &Book);
void printSqlist(SqList &L);
void findSqlist(SqList &L,Book &book);
void deleteSqlist(SqList &L,Book &book);
void readSqlist(SqList &L,Book &Book);
void insertSqlist(SqList &L,Book &book);
int main()
{
SqList L; Book Book,book; //查找用的
system("color 0B");
InitList(L);
system("cls");
while(1)
{
int choice;
menu();
printf("选择功能\n");
cin>>choice;
switch(choice)
{
case 1:creatSqlist(L,Book);break;
case 2:findSqlist(L,book);break;
case 3:deleteSqlist(L,book);break;
case 4:insertSqlist(L,book);break;
case 5:readSqlist(L,Book);break;
case 6:printSqlist(L);break;
case 7: exit(0); break;
default: printf("输入有错,重输!\n");
}
}
return 0;
}
//创建
void creatSqlist(SqList &L,Book &Book)
{
for(int i=0;i<4;i++)
{
printf("输入第%d本书的书号和书名:\n",i+1);
scanf("%s%s",Book.no,Book.name);
L.elem[i]=Book;
L.length++;
}
printSqlist(L);
}
//输出
void printSqlist(SqList &L)
{
system("cls");
printf("%10s\t\t图书信息\n");
printf("%10s\t\t\t\t%10s\n","书名","书号");
for(int i=0;i<L.length;i++){
Book book=L.elem[i];
printf("%10s\t\t\t\t%10s\n",L.elem[i].name,L.elem[i].no);
//printf("%10s\t\t\t\t%10s\n",book.name,book.no);
}
}
//查找
void findSqlist(SqList &L,Book &book)
{
printf("输入查找书的书号:\n");
scanf("%s",book.no);
// if(book.no<1||book.no>L.length)
// {
// printf("你输入的有误,请重输:\n");
// scanf("%s",book.no);
// }
//printf("%s",book.no); 实验
//printf("%d",L.length);
for(int i=0;i<L.length;i++)
{
Book book1=L.elem[i];
//if(book.no == book1.no)
if(!strcmp(book1.no,book.no))
{
printf("%10s\t\t图书信息\n");
printf("%10s\t\t\t\t%10s\n","书名","书号");
printf("%10s\t\t\t\t%10s\n",book1.name,book1.no);
}
}
}
//删除
void deleteSqlist(SqList &L ,Book &book)
{
printf("输入要删除的第几本书:\n");
int j;
scanf("%d",&j);
for(int i=j;i<L.length;i++) //有疑问!!!!!!!
{
{
L.elem[i-1]=L.elem[i]; //向前移
}
}
L.length--;
// for(int j=i;j<=L.length-1;j++){
// L.elem[j-1]=L.elem[j];
// }
printf("删除成功!\n");
}
//取值
void readSqlist(SqList &L,Book &Book)
{
printf("输入取的第几本书:\n");
int i;
scanf("%d",&i);
if(i<1||i>L.length)
{
printf("你输入的有误,请重输:\n");
scanf("%d",&i);
}
Book=L.elem[i-1];
printf("你取的第%d本书为:\n",i);
printf("%10s\t\t\t图书信息\n");
printf("%10s\t\t\t\t%10s\n","书名","书号");
printf("%10s\t\t\t\t%10s\n",Book.name,Book.no);
//Status GetElem(SqList L,int i,Book &book){
// if(i<1||i>L.length) return ERROR;
// book=L.elem[i-1];
// return OK;
}
//插入
void insertSqlist(SqList &L,Book &book)
{
printf("输入插入的位置(第几本书之后):\n");
int i;
scanf("%d",&i);
if(i<1||i>L.length)
{
printf("你输入的有误,请重输:\n");
scanf("%d",&i);
}
printf("请输入插入书的书号和书名:\n");
scanf("%s%s",book.no,book.name);
for(int j=L.length-1;j>i-1;j--)
{
L.elem[j+1]=L.elem[j];//节点后移
L.elem[j]=book;//插书
}
L.length++;
}
总结:要学会看伪码,书上讲的很清楚。
代码应该可以用的,有问题我在改改。