有大佬可以看看我的代碼情況嗎?
剛學C語言半年,基礎不是特別牢編譯環境是visual Stdio 沒有找到語法錯誤,但是運行程序出現讀取訪問權限沖突,我該怎么辦啊
//file:xc.h
#ifndef x_h
#define x_h
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20 //存盤空間初始分配量
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType* elem;//陣列存盤資料元素,最大值為MAXSIZE
int listsize;
int len;//線性表當前長度
}SqList;
void CreateList(SqList* L, ElemType a[5], int n);//應該是先宣告所構造的線性表操作或者說線性表相關函式
Status InitList(SqList* L);
Status DestroyList(SqList* L);
Status ClearList(SqList* L);
Status ListEmpty(SqList L);
Status ListLength(SqList L);
Status GetELem(SqList L, int i, int* e);
Status LocateList(SqList L, int e);
Status PriorElem(SqList L, int cur_e, int* pri_e);
Status NextElem(SqList L, int cur_e, int* Nex_e);
Status ListInsert(SqList* L, int i, int e);
Status ListDelete(SqList* L, int i, int* e);
Status TravelList(SqList L);
#endif
//file:2.c
#include "xc.h"
#include"xc.c"
void MergeList(SqList La, SqList Lb, SqList* Lc)
{
int i, j, k, La_len, Lb_len, ai, bj;
i = j = 0;
k = 0;
La_len = La.len;
Lb_len = Lb.len;
while (i < La_len && j < Lb_len)
{
GetELem(La, i, &ai);
GetELem(Lb, j, &bj);
if (ai <= bj)
{
ListInsert(&Lc, k++, ai);
++i;
}
else
{
ListInsert(&Lc, k++, bj);
++j;
}
}
while (i < La_len)
{
GetELem(La, i++, &ai);
ListInsert(&Lc, k++, ai);
}
while (j < Lb_len)
{
GetELem(Lb, j++, &bj);
ListInsert(&Lc, k++, bj);
}
}
int main()
{
int la[5] = { 1,3,5,7,9 };
int lb[5] = { 2,3,6,8,10 };
int i, m, n, k;
int a = 10;
i = 3;
SqList La, Lb, Lc;
InitList(&La);
InitList(&Lb);
InitList(&Lc);
CreateList(&La, la, 5);
CreateList(&Lb, lb, 5);
printf("下面展現已創立的線性表 La Lb\n\n");
printf("線性表La:\n");
TravelList(La);
printf("\n線性表Lb:\n");
TravelList(Lb);
printf("\n下面合并線性表La和Lb成為Lc:\n");
MergeList(La, Lb, &Lc);
TravelList(Lc);
printf("下面銷毀線性表Lc\n銷毀后線性表為空\n");
DestroyList(&Lc);
TravelList(Lc);
printf("下面判斷線性表是否為空:%d(1為是,0為否)\n", ListEmpty(Lc));
printf("\n下面展現已有線性表La的長度為:%d\n", ListLength(La));
printf("\n有線性表La中第3個元素為:%d\n", a);
printf("\n下面置空線性表Lb\n則置空后Lb為:\n");
ClearList(&Lb);
TravelList(Lb);
printf("下面判斷線性表是否為空:%d(1為是,0為否)\n", ListEmpty(Lb));
printf("\n下面尋找線性表La中第三個元素,以及第三個元素的前驅和后繼\n");
m = GetELem(La, i - 1, a);
n = PriorElem(La, i - 1, a);
k = NextElem(La, i - 1, a);
printf("第三個元素為:%d\n第三個元素的前驅為:%d\n第三個元素的后繼為:%d\n\n", m, n, k);
printf("下面我們往La表中插入一個元素\n");
printf("假使往第三個位置插入元素a=10\n");
a = 10;
ListInsert(&La, i, a);
printf("插入后線性表La為:\n");
TravelList(La);
printf("\n我們洗掉線性表La中的第3個元素后得到La為:\n");
ListDelete(&La, i, a);
TravelList(La);
printf("\n下面查找線性表中是否有值為3的元素:\n");
LocateList(La, i);
}
//file:xc.c
#include "xc.h"
void CreateList(SqList* L, ElemType a[100], int n)//應該是先宣告所構造的線性表操作或者說線性表相關函式
{
int i;
for (i = 0; i < n; i++)
{
*(L->elem + i) = a[i];
}
L->len = n;
}
Status InitList(SqList* L)
{
L->elem = (ElemType*)malloc(MAXSIZE * sizeof(ElemType));
if (!L->elem) exit(OVERFLOW);//錯誤退出
L->len = 0;
L->listsize = MAXSIZE;
return OK;
}
Status DestroyList(SqList* L)
{
free(L->elem);
L->elem = NULL;
L->len = 0;
L->listsize = 0;
return OK;
}
Status ClearList(SqList* L)
{
L->len = 0;
return OK;
}
Status ListEmpty(SqList L)
{
if (L.len == 0)
return TURE;
else
return FALSE;
}
Status ListLength(SqList L)
{
return L.len;
}
Status GetELem(SqList L, int i, int *e)
{
if (i < L.len)
{
e = L.elem[i];
return e;
}
else
{
return FALSE;
}
}
Status LocateList(SqList L, int e)
{
int i;
for (i = 0; i < L.len; i++)
{
if (L.elem[i] == e)
{
printf("值為%d的元素是表中第%d個元素\n", e, i + 1);
return i;
}
}
}
Status PriorElem(SqList L, int cur_e, int* pri_e)
{
if (cur_e + 1 == 0)
{
return FALSE;
}
if (cur_e + 1 != 0 && cur_e < L.len)
{
pri_e = L.elem[cur_e - 1];
return pri_e;
}
}
Status NextElem(SqList L, int cur_e, int* Nex_e)
{
if (cur_e == L.len)
{
return FALSE;
}
if (cur_e != L.len && cur_e > 0)
{
Nex_e = L.elem[cur_e + 1];
return Nex_e;
}
}
Status ListInsert(SqList* L, int i, int e)
{
int* p, * q;
p = L->elem + i;
q = L->elem + L->len;
for (; q >= p - 1; q--)
*(q + 1) = *q;
*(--p) = e; //插入元素
L->len++;
return TURE;
}
Status ListDelete(SqList* L, int i, int* e)
{
int* p, * q;
if (i<1 || i>L->len)
{
return FALSE;
}
if (i > 1 && i < L->len)
{
p = L->elem + i - 1;
q = L->elem + L->len - 1;
for (; p <= q; p++)
*p = *(p + 1);
L->len--;
return TURE;
}
}
Status TravelList(SqList L)
{
int i;
int* p = L.elem;
for (i = 0; i < L.len; i++, p++)
{
printf("第%d個元素為:%d\n", i, *p);
}
return TURE;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269970.html
標籤:C語言
上一篇:迪杰斯拉求最短路徑
