1. 程式人生 > >資料結構第一次上機(學生資訊管理&線性表&順序表)

資料結構第一次上機(學生資訊管理&線性表&順序表)

課程名:資料結構

實驗目的:

1、掌握線性表的定義;

2、掌握線性表的基本操作,如建立、查詢、插入和刪除等。

實驗要求:定義一個包含學生資訊(學號,姓名,成績)的順序表和連結串列,使其具有如下功能:

(1) 根據指定學生個數,逐個輸入學生資訊;

(2) 逐個顯示學生表中所有學生的相關資訊;

(3) 根據姓名進行查詢,返回此學生的學號和成績;

(4) 根據指定的位置可返回相應的學生資訊(學號,姓名,成績);

(5) 給定一個學生資訊,插入到表中指定的位置;

(6) 刪除指定位置的學生記錄;

(7) 統計表中學生個數。

實驗題目:線性表的基本操作及其作用

實驗過程:

按照實驗要求編寫相應程式程式碼,並除錯執行。

附:順序表與連結串列操作的主函式程式碼。

執行演示過程如下(這部分不需要寫到報告上):

1、 建立一個學生表(5個學生);

2、 顯示該表中所有的元素;

3、 根據姓名查詢到第3個學生的資訊並顯示;

4、 插入一個新的學生並顯示全部學生資訊;

5、 刪除第3個學生的資訊並顯示全部學生資訊;

6、 統計學生表中元素的個數(即學生人數);

7、 退出

實驗結果:

能夠順利完成順序表和單鏈表的建立、插入、刪除等操作。

實驗分析:

1、順序表和單鏈表在各種操作實現過程中的差別

2、程式除錯執行中出現的錯誤資訊原因分析。

參考資訊:

Definition of structure student

typedef struct {

    char no[8];   //8位學號

    char name[20]; //姓名

    int  score;     //成績

}Student;

Definition of sequential list:

typedef  struct {

  Student  *elem;     //指向資料元素的基地址

  int  length;       //線性表的當前長度                                                   

 }SqList;

Definition of linked list

typedef struct LNode{

     Student   data;       //資料域

     struct LNode  *next;   //指標域

}LNode,*LinkList;  

實驗要求:

(1) 程式要新增適當的註釋,程式的書寫要採用縮排格式

(2) 程式要具在一定的健壯性,即當輸入資料非法時,程式也能適當地做出反應,如插入刪除時指定的位置不對等等。

(3) 程式要做到介面友好,在程式執行時使用者可以根據相應的提示資訊進行操作。

(4)上傳源程式到課堂派。順序表的源程式儲存為SqList.cpp,連結串列的源程式儲存為LinkList.cpp

Code:

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#define OK 1
#define ERROR 0
//#define OVERFLOW -1
#define MAXSIZE 100
using namespace std;

typedef int Status;		//定義函式返回值型別

typedef struct
{
	char no[8];			//學號 
	char name[20];		//姓名 
	int score;			//成績 
}Student;

typedef Student ElemType;

typedef struct
{
	ElemType *elem;		//儲存空間的基地址
	int length;			//當前長度 
}SqList;

//typedef struct LNode
//{
//	Student data;
//	struct LNode *next;
//}LNode,*LinkList;

Status IniList(SqList &L)	//構造一個空的順序表L 
{
	L.elem=new ElemType[MAXSIZE];   //為順序表分配一個大小為MAXSIZE的陣列空間
	if(!L.elem)
		exit(OVERFLOW);
	L.length=0;
return OK; 
}

ElemType GetElem(SqList L,int i)
{
//	if(i<1||i>L.length)
//		return ERROR;
	return L.elem[i];
}

int LocationElem(SqList L,char str[])  //根據名字查詢,返回其在順序表中的序號 
{
	for(int i=1;i<=L.length;i++)
	{
		if(strcmp(L.elem[i].name,str)==0)
			return i;
	}
	return 0;
}

Status ListInsert(SqList &L,int i,ElemType e)	//在第i個位置插入學生資訊 
{
	if(i<1||i>L.length+1)
		return ERROR;
	if(L.length==MAXSIZE)
		return ERROR;
	for(int j=L.length;j>=i;j--)
		L.elem[j+1]=L.elem[j];
	L.elem[i]=e;
	L.length++;
return OK;
}

Status ListDelete(SqList &L,int i)	//在順序表中刪除i位置的學生資訊 
{
	if(i<1||i>L.length)
		return ERROR;
	for(int j=i;j<=L.length;j++)
		L.elem[j]=L.elem[j+1];
	L.length--;
return OK;
}

void Input(ElemType &e)			//輸入 
{
	printf("姓名:");
	scanf("%s",e.name);
	
	printf("學號:");
	scanf("%s",e.no);
	
	printf("成績:");
	scanf("%d",&e.score);
	
	printf("輸入完成\n\n");
}

void Output(ElemType &e)		//輸出 
{
	printf("姓名:%-20s\n學號:%-10s\n成績:%-10d\n\n",e.name,e.no,e.score);
}
void Function()
{
	printf("\n************************\n\n");
	puts("1.構造順序表"); 
	puts("2.錄入學生資訊");
	puts("3.顯示學生資訊");
	puts("4.輸入姓名,查詢該學生");
	puts("5.顯示某位置該學生資訊");
	puts("6.在指定位置插入學生資訊");
	puts("7.在指定位置刪除學生資訊");
	puts("8.統計學生個數");
	puts("9.退出");
	printf("\n************************\n\n");
}
int main()
{
	SqList L;
	ElemType a,b,c,d;

	int x,choose;
	while(1)
	{
		puts("請選擇您要執行的操作:");
		Function();
		scanf("%d",&choose);
		if(choose==9) 
		{
			puts("感謝您的使用"); 
			break;
		}
		switch(choose)
		{
			case 1:
				if(IniList(L))
					printf("成功建立順序表\n\n");
				else
					printf("順序表建立失敗\n\n"); 
			case 2:
				printf("請輸入要錄入學生的人數:");
				scanf("%d",&x);
				for(int i=1;i<=x;i++)
				{
					printf("第%d個學生:\n",i);
					Input(L.elem[i]);
				}
				L.length=x;
				break;
			case 3:
				for(int i=1;i<=x;i++)
				{
					a=GetElem(L,i);
					Output(a);
				}
				break;
			case 4:
				char s[20];
				printf("請輸入要查詢的學生姓名:");
				scanf("%s",s);
				if(LocationElem(L,s))
					Output(L.elem[LocationElem(L,s)]);
				else
					puts("對不起,查無此人");
				break;
			case 5:
				printf("請輸入要查詢的位置:");
				int id1;
				scanf("%d",&id1);
				b=GetElem(L,id1);
				Output(b);
				break;
			case 6:
				printf("請輸入要插入的位置:");
				int id2;
				scanf("%d",&id2);
				printf("請輸入學生資訊:\n");
				Input(c);
				if(ListInsert(L,id2,c))
				{
					x++;
					puts("插入成功");
				}
				else
				{
					puts("插入失敗");
				}
				break;
			case 7:
				printf("請輸入要刪除的位置:");
				int id3,ok;
				scanf("%d",&id3);
				printf("確認刪除學生資訊?\n確認請按1,取消請按2\n");
				if(scanf("%d",&ok),ok==1)
				{
					if(ListDelete(L,id3))
					{
						x--;
						puts("刪除成功");
					}
					else
					{
						puts("刪除失敗");
					}
				}
				
				break;
			case 8:
				printf("已錄入的學生個數為:%d\n\n",L.length);
				break; 
	}
	
	}
return 0;
}


相關推薦

資料結構第一上機學生資訊管理&線性&順序

課程名:資料結構 實驗目的: 1、掌握線性表的定義; 2、掌握線性表的基本操作,如建立、查詢、插入和刪除等。 實驗要求:定義一個包含學生資訊(學號,姓名,成績)的順序表和連結串列,使其具有如下功能: (1) 根據指定學生個數,逐個輸入學生資訊; (2) 逐個顯示學生表中所有

資料結構第一作業學生資訊管理系統-順序&&連結串列

實驗目的 : 1 、掌握線性表的定義; 2 、掌握線性表的基本操作,如建立、查詢、插入和刪除等。 實驗內容: 定義一個包含學生資訊(學號,姓名,成績)的的 順序表和連結串列,使其具有如下功能: (1) 根據指定學生個數,逐個輸入學生資訊; (2) 逐個顯示學生表中所有學生

2016級資料結構第一上機解題報告

A: A題只要按照題目要求做就行,因為按值傳遞是不會改變原來變數的值的,而傳入引用和指標都會改變原來的資料,所以第一行輸出是a,b,其餘兩行是b,a, 參考程式碼: #include <iostream> void swap1(int a, int b) {

資料結構第二作業表示式求值【棧模擬】

實驗題目:棧的應用-算術表示式求值                       實驗目的 : 1.掌握棧的定義及實現; 2.掌握利用棧求解算術表示式的方法。 實驗內容: 通過修改完善教材中的演算法3.4,利用棧來實現算術表示式求值的演算法。對演算法3.4中呼叫的幾個函式要

學生資訊管理系統--Sqlist-順序

#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> #define OK 1 #define ERROR 0 #define O

結構體陣列排序 學生資訊 按成績排序

/* name:學生資訊結構體  按總分排序 (降序) */ #include<stdio.h> typedef struct{//結構體 定義時儘量放main()外面---方便 int grade;int age;char name[10];/*其他資訊就不列舉了*/}Student;  int

一個Python編寫的小程式學生資訊管理系統

def printInfo(StudentData,StudentName): """ :param StudentData: :param StudentName: :return: """ student = StudentData[Stude

20172328 2018-2019-1《程式設計與資料結構》課程總結第2學期課程總結與回顧

20172328 2018-2019-1《程式設計與資料結構》課程總結 FROM->>TO: How are you? 2018年9月9日->>2018年12月16日: Great! 本學期的程式資料和資料結構課程到這裡就告一段落了,接下來就讓我們一同回顧這學期

資料結構演算法 - 交換排序冒泡、冒泡改進 and 快速排序

資料結構演算法 - 交換排序(冒泡、快速排序) 交換排序 氣泡排序 快速排序 交換排序 交換排序的核心思想是通過交換位置來對序列進行排序(其實很多排序都會用到交換操作,但它們的思

第一面試java 中equal和==的詳解

        今天去了方正國際軟體有限公司面試,第一次面試,面試之後的唯一想做的就是把基礎打好。來看看筆試的第一題 Long a1=128L; Long a2=128L; Long a3=127L; Long a4=127L; Sy

JAVA原始碼學生資訊管理系統

1. [程式碼][Java]程式碼      package student; import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.ev

資料結構圖之二最小生成樹--普里姆演算法

1 #include <iostream> 2 #include "SeqList.h" 3 #include <iomanip> 4 using namespace std; 5 6 #define INFINITY 65535 7 8 t

C語言小專案學生資訊管理系統

/* 執行環境:我是在linux裡面用gcc編譯的,在windows裡應該也能執行,用的一些檔案庫函式都是c標準庫,沒有用linux的系統呼叫(糾正一下:system("clear")這個系統呼叫是linux的,windows裡面用system("cls") )

資料結構課程設計【學生資訊管理系統煙大版

/* * Copyright (c) 2016, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:student.project * 作者:李瀟 * 完成日期:2016年12月28日 * 版本號:DEVC+

資料結構-第一章,順序,連結串列,棧結構,佇列結構的關係個人見解

首先 順序表  和 連結串列是 兩個儲存結構。分別有自己的儲存特點。 其次 順序表 和 連結串列分別存放在不同的地方,“這個地方”就是 “棧” 或者 “佇列” 了 其實就是按照   FIFO先進先出 和  FILO先進後出 來處理資料所區別。 {{{而對於 FIFO 呢

資料結構課程設計——學生資訊管理系統

/*Copyright (c)2017,煙臺大學計算機與控制工程學院 *All rights reservrd. *作者:趙楷文 *完成時間:2017年12月20日 *版本號:v1.0 *問題描述:設計一個管理學生資訊的

資料結構課程設計—學生資訊管理系統

問題描述: /* * Copyright (c)2015,煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:aaaa.cbp * 作 者:張芸嘉 * 完成日期:2015年12月24日 * 版 本

caffe學習筆記--使用自己的資料第一進行訓練

接著上一篇博文:製作自己的資料集 在製作好我們自己的LMDB格式的資料集後,我們就可以依照前面mnist的例程來對LeNet模型進行訓練啦,有木有很激動(≧▽≦)/ (雖然現在對模型而是一片懵懂) 簡單的說下步驟: 從caffe root/exmples

學生資訊管理系統js與php的資料傳輸

最近期末將至,比較忙,更得比較慢,見諒。 搭建完環境並且確認連線之後,我們可以開始編寫程式了。 然後建表 插入資料 (這裡僅作一個示例) 另外建表的時候要注意,因為要建立檢視,所以應該把要與另一個表連線的項建為外來鍵,然後另一個表通過refer

資料結構課程設計-學生資訊管理系統

/* * 煙臺大學計算機與控制工程學院 *檔名稱:mian.cpp *作 者:王旭 *完成日期:2015年12月25日 *版 本 號:v1.0 *