主頁 > 後端開發 > 這個順序表為什么才輸入完元素個數就中斷了呢

這個順序表為什么才輸入完元素個數就中斷了呢

2020-09-15 16:10:34 後端開發

諸位大佬可以幫我試運行一下看看為什么程式會中斷嗎,我連隨機種子都沒法輸入,好崩潰
/*#include <iostream.h>
#include <iomanip.h>*/
#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int max=10000;

struct SqList
{
int elem[10000];    //存放元素的陣列
int length;            //當前長度
};

void init(SqList &list);
void display(SqList &list);
void insert(SqList &list);
void search(SqList &list);
void del(SqList &list);
void simpleSort(SqList &list);
void quickSort(SqList &list);
void binarySearch(SqList &list);
void inverter(SqList &list);
void orderlyinserted(SqList &list);
void specifydelete(SqList &list);
void merge(SqList &LA,SqList &LB,SqList &LC);

SqList list,LA,LB,LC;//本人百度得出,線性表的順序實作結構體 

int main()
{
char choice;

while (1)
{
//stem("cls");//本人百度出來的,“system("cls");的意思就是呼叫DOS下的清屏命令“cls” 
    printf("\n\n\n\n");
    printf ("\t\t            靜態線性表操作  \n");
printf ("\t\t======================================");
printf ("\n\n");
printf ("\t\t             1:初始化      \n");
printf ("\t\t             2:顯示        \n");
printf ("\t\t             3:單個插入    \n");
printf ("\t\t             4:查找        \n");
printf ("\t\t             5:洗掉        \n");
printf ("\t\t             6:簡單排序    \n");
printf ("\t\t              7:快速排序    \n");
printf ("\t\t              8折半查找   \n");
printf ("\t\t             9:就地逆置   \n");
printf ("\t\t             10:有序插入    \n");
printf ("\t\t             11:洗掉順序表中元素值在 x到y(x和y自定)之間的所有元素   \n");
printf ("\t\t             12:實作將兩個非遞減的順序表進行合并    \n");
printf ("\n");
printf ("\t\t             0:退出        \n");
printf ("\n");
printf ("\t\t請選擇:" );

choice = getch();

switch(choice)//里面的這個選擇是前面定義的變數,也就是運算式。 
{
case '1':
init(list);
break;
case '2':
display(list);
break;
case '3':
insert(list);
break;
case '4':
search(list);
break;
case '5':
del(list);
break;
case '6':
simpleSort(list);
break;
case '7':
quickSort(list);
break;
case '8':
binarySearch(list);
break;
case '0':
exit(0);
}
}
}



//對以下代碼提示,螢屏提示后,從鍵盤輸入線性表長度和(亂數種子)!!!,生成(指定長度)!!!的線性表list
void init(SqList &list)//順序表的初始化 
{
int i;
while (1)
{
    printf( "輸入元素個數(0-10000 ):" );
scanf("%d", list.length);
if (list.length >= 0 && list.length <= max)                                    /*本人百度搜索得到的線性表初始化格式如下 ,因為此題有特殊要求所以看以來不大一樣
                                                                                  //初始化順序表
                                                                                         void InitList(PSeqList L)
                                                                                        {
                                                                                             if (L == NULL)話說這一步是什么意思,是等于空就沒有意義了是嗎? 
                                                                                        {
                                                                                                   return;
                                                                                        }
                                                                                              L->length = 0;
                                                                                        }  */ 
break;
        printf("\n");
}
while (1)
{
    printf ("輸入亂數種子(0-32767):" );
scanf("%d",&i);
if (i >= 0 && i <= 32767)
break;
printf("\n");
}
srand(i);  //指定亂數種子,相同的種子將產生相同的資料序列
rand();

for (i = 0; i < list.length; i++)
{
list.elem[i] = rand() % 10000;
}
for (i = list.length; i < max; i++)
list.elem[i] = 0;
}

//承接以下編碼內容,在螢屏上依次顯示線性表list中的元素個數和全部元素
//格式應便于觀察
//如果需要指定輸出的寬度,可以使用 cout << setw(W) << X ,其中 X 是輸出的數值,W 是占據的列數
void display(SqList &list)// 第一點顯示
{   int k;
    printf("%d\n",list.length);
    for (k = 0; k < list.length; k++)
    {
        printf("%-3d", list.elem[k]);
    }
    printf("\n");

}

//以下內容,螢屏提示后,從鍵盤輸入一個元素值,然后把這個新元素插到線性表list的!!末尾!!(親愛的朋友,你這一點沒有達成喲) 
//應有溢位判斷和報告
void insert(SqList &list)//第二點,插入  
{    
    int i,j;
  printf("請輸入一個需要插入的元素值:");
scanf("%d",i); 
    /*if(i<1||i>list.length+1)           //判斷插入位置是否有效,但是這道題是尾插 
    {
        return false;
    }*/
 
    if (list.length == max)
    {
        printf("順序表已滿,不能插入!\n");
    }
    list.elem[list.length] = i;
    list.length++;
}

//螢屏提示后,從鍵盤輸入一個元素值,在線性表list中搜索這個元素
//螢屏顯示搜索結果和搜索程序中的比較次數
void search(SqList &list)//第三點,查找 
{
int i,e;
printf("請輸入一個需要查找的元素值:");
scanf("%d",e);
    for(int i=0;i<list.length;i++)
        {
        if(list.elem[i]==e)
            printf("list.elem[%d]=%d",i,e);
            printf(" %d",i+1);
        }
}

//螢屏提示后,從鍵盤輸入一個元素值,在線性表list中洗掉這個元素!!
//螢屏顯示洗掉成功與否的資訊,并顯示比較次數和移動次數
void del(SqList &list)//第四點,洗掉 
{
int i,j,count;
printf("請輸入一個需要洗掉的元素值:");
scanf("%d",i);
count=0;
    if(i<1||i>list.length) ;            //洗掉位置有誤
       for(int j=i;j<list.length;j++)
       {
          list.elem[j-1]=list.elem[j]; 
  count++;     //前移元素
       }
          list.length--;
         
        printf("移動次數:%d",count);
        printf("\n");
        printf("比較次數:%d",i);
          

}

//對線性表list進行簡單排序
//螢屏顯示比較次數和移動次數
void simpleSort(SqList &list)//第五點,簡單排序 
{
 int m = list.length - 1; 
 int flag = 1;  
 int i,j,t,count;
 count=0;       //flag用來標記某一趟排序是否發生交換
    while((m > 0) && (flag == 1))
 {
 
        flag=0;                         //flag置為0,如果本趟排序沒有發生交換,則不會執行下一趟排序
 
        for(j = 1; j <=m ; j++) 
    {
            if(list.elem[j] > list.elem[j+1]) 
            {
                flag = 1;                   //flag置為1,表示本趟排序發生了交換
                t = list.elem[j]; list.elem[j] = list.elem[j+1];  list.elem[j+1] = t;   //交換前后兩個記錄
            }
 
        --m;
count++;//交換了之后最大的已經排到后面了,所以減去一是為了減少計算量 
    }
}
 printf("比較次數和移動次數均為:%d",count);



//對線性表list進行快速排序
//螢屏顯示比較次數和移動次數
void quickSort(SqList &list)//)第五點,快速排序 
{   
    int count=0,low,high;
    list.elem[0] = list.elem[low];                //用子表的第一個記錄作樞軸記錄,假設最低等于0 
    list.elem[list.length] = list.elem[high]; 
int pivotkey = list.elem[low];      //樞軸記錄關鍵字,有一個自創詞語叫做樞軸關鍵字 
while (low < high) {              //從表的兩端向中間掃描
count++;
while (low < high && list.elem[high]>= pivotkey) 
--high;                   
list.elem[low] = list.elem[high];         //將比樞軸小的記錄移動到低端
while (low < high && list.elem[low] <= pivotkey)
++low;                    
list.elem[high] = list.elem[low];         //將比樞軸大的記錄移動到高端
}
list.elem[low] = list.elem[0];                //樞軸記錄到位 
printf("比較次數和移動次數均為:%d",count);
}
 

//螢屏提示后,從鍵盤輸入一個元素值,對經過排序的線性表list進行折半查找
//螢屏顯示查找結果,并顯示比較次數
void binarySearch(SqList &list)//第六點,折半查找 

    int key,i,j,temp;
  if (list.length == 0)printf("順序表為空");
  for(int i=0;i<list.length;i++){
for(int j=i+1;j<list.length;j++){
if(list.elem[i]>list.elem[j])
temp=list.elem[j];
list.elem[j]=list.elem[i];
list.elem[i]=temp;
}  
}    
    if(key<list.elem[0]||key>list.elem[list.length])printf("恭喜您已經找到了,該元素所在位置為:查無此數");
    printf("比較次數為:0");
        int l = 0, h = list.length, midst,count=0;
while(l <= h){
midst = (l + h) / 2;
if(key == list.elem[midst]){
printf("恭喜您已經找到了,該元素所在位置為:第%d位",midst);
}
else if(list.elem[midst] > key){
h = midst - 1;
}
else{
l = midst + 1;
}
count++;
}
}
void inverter(SqList &list){//就地逆置 
int i,j,temp,k;
 int l = 0, h = list.length, midst;
 midst = (l + h) / 2;
  if (list.length == 0)printf("順序表為空");
  for(int i=0;i<midst;i++){
for(int j=list.length;j>midst;j--){
if(list.elem[i]>list.elem[j])
temp=list.elem[j];
list.elem[j]=list.elem[i];
list.elem[i]=temp;
}  
for(k=0;k<list.elem[h];k++)printf("%d ",list.elem[k]);
    }
}
void orderlyinserted(SqList &list){//有序插入 
  int i,j,temp,k,a;
  scanf("%d",k);
  if (list.length == 0)printf("順序表為空");
  for(int i=0;i<list.length;i++){
for(int j=i+1;j<list.length;j++){
if(list.elem[i]>list.elem[j])
temp=list.elem[j];
list.elem[j]=list.elem[i];
list.elem[i]=temp;
}  
}

    //判斷順序表是否已滿
    if (list.length >= max)
    {
        printf("順序表已滿,不能插入!\n");
    }
    else
    {    
        for (a = 0; a<= list.length; a--)
        {
         if(k>=list.elem[a-1]&&(k<=list.elem[a])) 
            list.elem[a + 1] = list.elem[a];//前面的等于后面的,相當于向后移了一位 
            printf("插入元素后的資料表為:%d",list.elem[a]);
        }
        list.length++;   //資料表的長度加1
    }
    
}
void specifydelete(SqList &list){//指定洗掉 
    int x,y,i; 
if(x<0||y>list.length)printf("無效洗掉"); 

else {
for(i=y;i<=2*y-x;i++){
        list.elem[i-(y-x+1)]=list.elem[i];}//用7、8、9、10、11元素分別覆寫2、3、4、5、6;
    }
    list.length-=y-x+1;//順序表長度減x,y之間的元素 
}
void merge(SqList &LA,SqList &LB,SqList &LC)
{

int i, j, k;
i = 0; j = 0; k = 0;
while (i < LA.length && j < LB.length)
{
if (LA.elem[i] <= LB.elem[j])
{
LC.elem[k] = LA.elem[i];//小的先放 
i++; k++;
}
else
{
LC.elem[k] = LB.elem[j];
j++; k++;
}
}
//當表LA比表LB長時,將表LA剩下的元素賦給表LC
while (i < LA.length)
{
LC.elem[k] = LA.elem[i];
i++; k++;
}
while (j < LB.length)
{
LC.elem[k] = LB.elem[j];
j++; k++;
}
LC.length = LA.length + LB.length;
}
//7.編程實作一個順序表的就地逆置,即利用原表的存盤空間將順序表逆置;
// 8、順序表有序插入(顯示比較次數、移動次數),
       //螢屏提示后,從鍵盤輸入一個元素值,在經過排序的線性表中插入這個元素;
       //螢屏顯示比較次數和移動次數,應有溢位判斷和報告;
 // 9、要求以較高的效率實作洗掉順序表中元素值在 x到y(x和y自定)之間的所有元素;
  //10、編程實作將兩個非遞減的順序表進行合并,要求同樣的資料元素只出現一次;
  //*11、編程實作順序表的shell排序(步長為5,3,1);
 // *12、編程實作堆排序演算法;
 // *13、利用三元組順序表存盤矩陣,實作矩陣的轉置(請獨立寫程式實作)。




轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/48123.html

標籤:C語言

上一篇:error LNK2019: 無法決議的外部符號 "void __cdecl Init(void)" (?Init@@YAXXZ),該符號在函式 _main 中

下一篇:令人絕望的順序表,糾錯糾了一天

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more