資料結構練習題(順序表和單連結串列)C++
1、
程式設計實現順序表的各種基本運算,並在此基礎上設計一個主程式,完成如下功能:
(1)初始化順序表;
(2)給定一個整型資料元素,將此元素插入到順序表的第i個位置;
(3)刪除順序表中第i個位置的元素,利用e返回被刪除的元素。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
//----- 順序表的順序儲存表示 -----
#define LIST_INIT_SIZE 100 // 儲存空間的初始分配量
#define LISTINCREMENT 10 // 儲存空間的分配增量
typedef struct {
ElemType *elem; // 儲存空間的基址
int length; // 表長
int size;// 儲存容量
int increment; // 擴容時,增加的儲存容量
} SqList; //順序表
// 構造一個順序表
Status InitSqlist(SqList &L){
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!L.elem) exit (OVERFLOW);
L.length = 0;
L.size = LIST_INIT_SIZE;
L.increment = LISTINCREMENT;
return OK;
}
// 判順序表是否為空表
Status ListEmpty(SqList L){
if (L.length==0) return OK;
else return ERROR;
}
//順序表插入函式
Status ListInsert_Sq(SqList &L, int i ,ElemType e){
//請在此填寫程式碼,將該演算法補充完整,參見課本和課件相關章節
int j;
if (i<1 || i>L.length+1)
return false;
i--;
for (j=L.length;j>i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i]=e;
L.length++;
return true;
}
//順序表刪除元素函式
Status ListDelete_Sq(SqList &L, int i, ElemType &e){
//請在此填寫程式碼,將該演算法補充完整,參見課本和課件相關章節
int j;
if(i<1||i>L.length)
return false;
i--;
e=L.elem[i];
for (j=i;j<L.length-1;j++)
L.elem[j]=L.elem[j+1];
L.length--;
return true;
}
//輸出順序表函式
void OutList_Sq(SqList L)
{ int i;
ElemType e;
if(ListEmpty(L)){
printf("這是一個空表!");
}
else
{
printf("順序表為:");
for(i=0;i<L.length;i++)
printf("%6d",L.elem[i]);
}
printf("\n");
}
//主函式
int main()
{ SqList L;
int cord,i; ElemType a;
printf(" 姓名:蔡旭勝 \n 學號:2050414821 \n 班級:軟體設計11班");
printf("第一次使用必須初始化!\n");
do{
printf("\n 主選單 \n");
printf(" 1 初始化順序表 ");
printf(" 2 插入一個元素 ");
printf(" 3 刪除一個元素 ");
printf(" 4 結束程式執行 ");
printf("\n-------------------------------------------------------------------\n");
printf("請輸入您的選擇( 1, 2, 3, 4)");
scanf("%d",&cord);
printf("\n");
switch(cord){
case 1:
InitSqlist(L);
OutList_Sq(L);
break;
case 2:
printf("\n請輸入要插入的插入位置和資料元素(如:3 20)");
scanf("%d%d",&i,&a);
ListInsert_Sq(L,i,a);
printf("\n插入%d元素之後的",a);
OutList_Sq(L);
break;
case 3:
printf("\n請輸入要刪除的資料元素的位置(如: 3)");
scanf("%d",&i);
ListDelete_Sq(L,i,a);
printf("\n刪除第%d個位置的元素之後",i);
OutList_Sq(L);
break;
case 4:
exit(0);
}
}while (cord<=4);
return 1;
}
2、
程式設計實現建立一個單連結串列,並在此表中插入一個元素和刪除一個元素
(1)通過鍵盤讀取元素建立單連結串列;
(2)指定一個位置,在此位置之前插入一個新元素;
(3)指定一個位置,刪除此位置元素。
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct Lnode {
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
//以下是建立單連結串列
void CreatList_L(LinkList &head)
{ LinkList tail, p;
int n,i;
p=(Lnode *)malloc(sizeof(Lnode));
head=tail=p;
head->next=NULL;
printf("\n請輸入連結串列的長度:");
scanf("%d", &n);
printf("\n請輸入%d個整型資料元素",n);
for(i=1;i<=n;i++){
p= (Lnode *)malloc(sizeof(Lnode));
scanf("%d", &p->data);
p->next=NULL;
tail->next=p;
tail=p;
}
printf("\n單連結串列的建立成功!");
}
//以下是輸出單連結串列
void OutputList_L(LinkList L){
LinkList p = L->next;
if(p==NULL){
printf("是一個空表!\n");
return;
}
printf("單連結串列是:");
while (p ) {
printf("%4d",p->data);
p = p->next;
}
printf("\n");
}
//在第 i 個元素之前插入一個元素
Status ListInsert_L(LinkList L, int i, ElemType e) {
LinkList p,s;
p=L;
int j=0;
for(j=0;j<i;j++)
{
p=p->next;
}
s= (Lnode *)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
//請在此填寫程式碼,將該演算法補充完整,參見課本和課件相關章節
return OK;
}
// 刪除第 i 個元素
Status ListDelete_L(LinkList L, int i, ElemType &e) {
LinkList p,q;
p=L;
q=L;
int j=0;
for(j=0;j<i-1;j++)
{
p=p->next;
q=q->next;
}
q= q->next;
e=q->data;
p->next=p->next->next;
//請在此填寫程式碼,將該演算法補充完整,參見課本和課件相關章節
return OK;
}
int main()
{ LinkList L;
int cord,i; ElemType a;
printf(" 姓名:蔡旭勝 \n 學號:2050414821 \n 班級:軟體設計11班");
printf("\n 您是第一次使用請先建立一個單連結串列!\n");
do{
printf("\n 主選單 \n");
printf(" 1 建立一個單連結串列 ");
printf(" 2 插入一個元素 ");
printf(" 3 刪除一個元素 ");
printf(" 4 結束程式執行 ");
printf("\n-------------------------------------------------------------------\n");
printf("請輸入您的選擇( 1, 2, 3, 4)");
scanf("%d",&cord);
printf("\n");
switch(cord){
case 1:
CreatList_L(L);
OutputList_L(L);
break;
case 2:
printf("\n請輸入要插入的插入位置和資料元素(如:3 20)");
scanf("%d%d",&i,&a);
if(ListInsert_L(L,i,a))
{
printf("\n插入元素成功!插入%d元素之後的",a);
OutputList_L(L);
}
else printf("插入元素失敗!\n");
break;
case 3:
printf("\n請輸入要刪除的資料元素的位置(如: 3)");
scanf("%d",&i);
if(ListDelete_L(L,i,a))
{
printf("\n刪除元素成功!被刪除的元素是 %d\n",a);
printf("\n刪除第%d個位置的元素之後",i);
OutputList_L(L);
}
else printf("刪除位置錯誤,請重新執行!\n");
break;
case 4:
exit(0);
}
}while (cord<=4);
return 1;
}
來自課下作業
相關文章
- 【資料結構與演算法學習】線性表(順序表、單連結串列、雙向連結串列、迴圈連結串列)資料結構演算法
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- 資料結構 - 單連結串列 C++ 實現資料結構C++
- 【資料結構】線性表-單連結串列資料結構
- 資料結構-單連結串列、雙連結串列資料結構
- 連結串列,樹,順序表操縱
- 資料結構——單連結串列的C++實現資料結構C++
- 資料結構篇_程式設計思想板塊_第一章順序表和連結串列資料結構程式設計
- 資料結構之單連結串列資料結構
- 資料結構04——單連結串列資料結構
- 資料結構 - 線性表 - 順序表資料結構
- 資料結構學習--連結串列資料結構
- 資料結構-線性表、連結串列資料結構
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 考研資料結構-線性表-順序表資料結構
- C++資料結構連結串列的基本操作C++資料結構
- 資料結構連結串列筆試題資料結構筆試
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- 資料結構與演算法-線性表-單連結串列資料結構演算法
- 【C++ 資料結構:連結串列】二刷LeetCode707設計連結串列C++資料結構LeetCode
- 資料結構-連結串列資料結構
- 連結串列-資料結構資料結構
- 資料結構 - 連結串列資料結構
- 資料結構--連結串列資料結構
- 資料結構—連結串列資料結構
- js實現資料結構--單連結串列JS資料結構
- 資料結構和演算法——Go實現單連結串列並且反轉單連結串列資料結構演算法Go
- 學習 JavaScript 資料結構(二)——連結串列JavaScript資料結構
- 畫江湖之資料結構【第一話:連結串列】單向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 單向連結串列資料結構
- 資料結構之「連結串列」資料結構
- JavaScript資料結構--連結串列JavaScript資料結構
- 資料結構之連結串列資料結構
- 資料結構和演算法面試題系列—連結串列資料結構演算法面試題
- C++順序結構(3)、資料型別_____教學C++資料型別