資料結構第一次上機(學生資訊管理&線性表&順序表)
課程名:資料結構
實驗目的:
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 *