1. 程式人生 > >實驗二 單鏈表的操作(不完善)

實驗二 單鏈表的操作(不完善)

/*實驗二  單鏈表的操作
1. 實驗目的:
1)掌握線性表的鏈式儲存結構;
2)驗證單鏈表及其基本操作的實現;
3)進一步掌握資料結構及演算法的程式實現的基本方法。
2. 實驗內容:(以下內容第1、2項必須完成)
1)程式設計實現單鏈表的以下基本操作:建立單鏈表,查詢單鏈表,插入單鏈表,刪除單鏈表。
 2)採用單鏈表結構程式設計實現:兩個有序單鏈表的歸併運算。
 注意:歸併方式見課本P20例2-2。*/
 #include <iostream>


 using  namespace std;


 #define OK 1
 #define ERROR 0


 typedef int Status;
 typedef int ElemType;


 typedef struct LNode
 {
     ElemType data;
     struct LNode *next;
 } LNode, *LinkList;


 LinkList p,L,s,q,La,Lb,Lc;
 int i,k,j,e,ai,bj;


 //建立
void CreateList_L(LinkList &L,int n)
 {
     L=(LinkList)malloc(sizeof(LNode));
     L->next=NULL;
     for(int i=n; i>0; --i)
     {
         p=(LinkList)malloc(sizeof(LNode));
         scanf("%d",&p->data);
         p->next=L->next;
         L->next=p;
     }
 }


 //查詢
Status GetElem_L(LinkList L,int i,ElemType &e)
 {
     p=L->next;
     j=1;
     while(p&&j<i)
     {
         p=p->next;
         ++j;
     }
     if(!p||j>i)  return ERROR;
     e=p->data;
     return OK;
 }


 //插入
Status ListInsert_L(LinkList &L, int i,ElemType e)
 {
     p=L;
     j=0;
     while(p&&j<i-1)
     {
         p=p->next;
         ++j;
     }
     if(!p||j>i-1) return ERROR;
     s=(LinkList)malloc(sizeof(LNode));
     s->data=e;
     s->next=p->next;
     p->next=s;
     return OK;
 }


 //刪除
Status ListDelete_List(LinkList &L,int i,ElemType &e)
 {
     p=L;
     j=0;


     while(p->next &&j<i-1)
     {
         p=p->next;
         ++j;
     }
     if(!(p->next)||j>i-1) return ERROR;
     q=p->next;
     p->next=q->next;
     e=q->data;
     free(q);
     return 1;
 }
 //求連結串列長度
int ListLength(LinkList La){
p=L->next;
int j=1;
while(p){
p=p->next;
j++;
}
return j;


 }
 //合併
int MergeList(LinkList La, LinkList Lb, LinkList &Lc){
i=j=1;k=0;
int  La_len=ListLength(La);
int Lb_len=ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len)){
GetElem_L(La,i,ai);  GetElem_L(Lb,j,bj);
if(ai<=bj) {ListInsert_L(Lc,++k,ai);}
else{ ListInsert_L(Lc,++k,bj);}
}
while(i<=La_len){
GetElem_L(La,i++,ai); ListInsert_L(Lc,++k,ai);
}
while(i<=Lb_len){
GetElem_L(Lb,j++,bj); ListInsert_L(Lc,++k,bj);
}
return 1;
 }


 int main()
 {
while(1)
{
     printf("請輸入你要進行的操作\n");
     printf("<0> 建立連結串列\n");
     printf("<1> 查詢表中的元素\n");
     printf("<2> 在表中插入元素\n");
     printf("<3> 刪除表中的元素\n");
printf("<4> 合併連結串列\n");
printf("<9> 結束程式\n");
     int n;
     scanf("%d",&n);
     if(n==0)
     {
         int i;
         printf("輸入連結串列的長度 :");
         scanf("%d",&i);
printf("按遞增順序輸入連結串列 :");
         CreateList_L(La,i);
}
       else  if(n==1)
         {
             int i;
             printf("查詢表中第幾個元素 :");
             scanf("%d",&i);
             if(GetElem_L(La,i,e))
             {
                 printf("表中第%d個元素是 :%d\n",i ,e);
             }
             else
                 printf("查詢失敗");
         }
         else if(n==2)
         {
             int i,m;
             printf("在表中第幾個元素前插入元素 :");
             scanf("%d%d",&i,&m);
             if(ListInsert_L(La,i,m))
             {
                 printf("插入成功\n");
             }
             else
                 printf("插入失敗\n");
         }
         else if(n==3)
         {
             int i;
             printf("輸入刪除元素的位置 :");
             scanf("%d",&i);
             if(ListDelete_List(La,i,e  ))
             {
                 printf("刪除成功\n");
             }
             else
                 printf("刪除失敗\n");
}
else if(n==4){
int i;
printf("必須確認執行過0,否則會出錯\n");
         printf("輸入連結串列Lb的長度 :");
         scanf("%d",&i);
printf("按遞增順序輸入連結串列 :");
         CreateList_L(Lb,i);
if(MergeList(La,Lb,Lc))
             {
                 printf("合併成功\n");
             }
             else
                 printf("合併失敗\n");
}
else if(n==9)
break;
}
return 0;
 }

相關推薦

實驗 單鏈操作(完善

/*實驗二  單鏈表的操作1. 實驗目的:1)掌握線性表的鏈式儲存結構;2)驗證單鏈表及其基本操作的實現;3)進一步掌握資料結構及演算法的程式實現的基本方法。2. 實驗內容:(以下內容第1、2項必須完成)1)程式設計實現單鏈表的以下基本操作:建立單鏈表,查詢單鏈表,插入單鏈表

(十Hibernate中的多操作(1:單向多對一

art 保存 int gen round t對象 情況 映射文件 拋出異常 由“多”方可知“一”方的信息,比如多個員工使用同一棟公寓,員工可以知道公寓的信息,而公寓無法知道員工的信息。 案例一: pojo類 public class Department {

C實現頭插法和尾插法來構建單鏈帶頭結點

res rgb eof uci fun while data 尾插法 輸入數據 鏈表的構建事實上也就是不斷插入節點的過程。而節點的插入能夠分為頭插法和尾插法。頭插法就是在頭結點後插入該節點,始終把該節點作為第一個節點。尾插法就是在鏈表的最後一個節點處插入元

資料結構實驗:線性操作(一元多項式的運算

title: 線性表操作(一元多項式的運算) date: 2018-10-26 11:22:37 tags: 資料結構 categories: 資料結構 線性表操作(一元多項式的運算) 實驗目的 1、定義線性表的鏈式儲存 2、實現對線性表的一些基本操作和具體函式定義

一個很奇葩的併發單鏈知道為什麼,併發執行緒上1000就會報錯(500以內就很正常

貼程式碼,如果有知道原因的高手希望可以告訴我一下,謝謝 #include <mutex>//互斥鎖 #include <stdio.h>      #include <string>      #include <WINSOC

網路協議分析與設計——Spin實驗(尚完善

參考教材:《網路協議工程》吳禮發,電子工業出版社,2011.4 實驗環境:Ubuntu 18.04.1 LTS,Windows 10,VMware 15.0.2。 (一)Spin入門(iSpin究竟是怎麼裝上去的?是tar.gz的install.sh還是sudo apt install spin?)

資料結構學習()——單鏈操作之頭插法和尾插法建立連結串列

連結串列也是線性表的一種,與順序表不同的是,它在記憶體中不是連續存放的。在C語言中,連結串列是通過指標相關實現的。而單鏈表是連結串列的其中一種,關於單鏈表就是其節點中有資料域和只有一個指向下個節點的指標域。建立單鏈表的方法有兩種,分別是頭插法和尾插法。 所謂頭插法,就是按節

資料結構實驗報告單鏈的基本操作

一.知識點 單鏈表: 部分成員方法:建構函式、get、set、add、remove、getSize、contains、merge最基本的動作: 從左到右移動指標p=p.next 帶頭節點的單鏈表類 public class SheadLinkedList<An

經典演算法學習——單鏈帶頭結點實現氣泡排序

演算法描述如下:(1)比較相鄰的前後兩個資料,如果前面資料大於後面的資料,就將兩個資料交換;(2)這樣對陣列的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據就到了最後一個位置,也就是下標為N-1的位置(沉到了水底)。(3)N = N-1,如果N不為0就重複(1)(2)

帶頭結點的單鏈操作(頭插法-c++

span str out let 單鏈表 null 頭結點 操作 truct c++編寫 帶頭結點的單鏈表操作(頭插法)(和c語言差不多) #include<iostream> #include<conio.h> using namespa

(十四Hibernate中的多操作(4:單向一對一

odin utf-8 lds () clas string 方式 rdb style 案例一: 註解方式實現一對一 UserBean.java package bean; import java.io.Serializable; import javax.pers

帶頭結點的單鏈操作說明

內存 arr 位置 not space n) end front tin 一、單鏈表簡介 相對於以數組為代表的“順序表”而言,單鏈表雖然存儲密度比較低(因為數據域才是我們真正需要的,指針域只是用來索引,我們並不真正需要它),但是卻具有靈活分配存儲空間、方便數據元素的刪除、方

MySQL 操作 (Day40

size key tail ica extra drop .... 約束 date 一.表介紹 表相當於文件,表中的一條記錄就相當於文件的一行內容,不同的是,表中的一條記錄有對應的標題,則稱為表的字段。 id, name, age, qq....稱為字段。其余的,一行內容

09-hibernate單操作(1

hbm.xml ive eat ring sets () 16px bin 提交 1,單一主鍵 2,基本類型 3,對象類型 4,組件屬性 5,單表操作 單一主鍵 常用生成策略: assigned 有程序員生成(手工) native  由數據庫底層,如果是mysql是in

web前端【第二篇】HTML基礎單、div

ebe add 渲染 efi end 文件 ctype 發送 type 一、表單 功能:表單用於向服務器傳輸數據,從而實現用戶與Web服務器的交互 表單能夠包含input系列標簽,比如文本字段、復選框、單選框、提交按鈕等等。 表單還可以包含text

C單鏈操作

i++ 釋放 str alloc malloc 指向 clear stdio.h print #include <stdio.h> #include <stdlib.h> #define ElemType int #define Statu

java 模擬單鏈操作

star node next ray datanode lse util class null 節點類 public class ListNode {int data;//數據ListNode next;//指針public ListNode(int x){data=x;}

朱有鵬C語言高階---4.9.8-單鏈--逆序(單鏈的完整程式(8

朱有鵬C語言高階---4.9.8-單鏈表--逆序(8)   什麼是連結串列的逆序? 連結串列的逆序又叫反向,意思就是把連結串列中所有的有效節點在連結串列中的順序給反過來。   單鏈表逆序演算法分析 (1)當我們對一個數據結構進行一個操作時,我們就需要一套演

資料結構-單鏈操作

// // main.c // Link_List // // Created by Smallflyfly on 2018/11/9. // Copyright © 2018 fang. All rights reserved. // #include <stdio.h>

資料結構實驗單鏈學生資訊

#include<iostream> #include<stdlib.h> using namespace std; class Student {private: struct Node {char name[20]; char age[4]; int nu