0
点赞
收藏
分享

微信扫一扫

数据结构-顺序表

三维控件研究 2022-03-21 阅读 88
数据结构

线性表的顺序表示和实现:

#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++; 
}

总结:要学会看伪码,书上讲的很清楚。

代码应该可以用的,有问题我在改改。

举报

相关推荐

0 条评论