當前位置:首頁 » 編程語言 » 順序表的初始化c語言

順序表的初始化c語言

發布時間: 2022-05-04 00:33:08

c語言(數據結構)順序表的初始化需要申請結點空間嗎

C語言(數據結構)順序表的初始化需要申請結點空間。
初始化順序表
1、/**
2、
*
初始化順序表
3、
*
返回1
表示初始化成功
4、*
返回0
表示初始化失敗
5、*/
6、int
initList_sq(sqlist
&L)
{
//只有在C++中才會有引用的存在
7、

L.elem
=
(SeqType
*)
malloc(sizeof(SeqType)
*
LIST_INIT_SIZE);
8、
if
(!L.elem)
9、

return
0;
//內存分配失敗,存儲空間不夠
10、
L.length
=
0;
//表示順序表為空
11、

L.listsize
=
LIST_INIT_SIZE;
//表示順序表裡,最大存儲單元個數
分配順序表的存儲單元,初始化順序表屬性的值。
定義結構
typedef
int
SeqType;
//存儲單元類型
typedef
struct{
SeqType
*elem;
//存儲空間基地址
int
length;
//當前長度
int
listsize;
//當前分配的存儲容量(以sizeof(ElemType)為單位)
}
SqList;
結構體內,有三個元素:存儲空間基地址,類似於數組首地址;當前長度,記錄順序表中有效存儲單元個數;當前分配的存儲容量,順序表中,最多容納的存儲單元個數。當順序表中所有存儲單元已經被使用,在下次插入元素之前,需要新增存儲單元。這點是數組所不具有的特性。
*註:定義一個存儲單元類型SeqType是為了使順序表適和更多數據類型,使用的時候修改SeqType類型即可。

② C語言數據結構順序表初始化

C數據結構的基礎是指針。好好花上幾天時間把指針搞懂再來學數據結構會事半功倍。

#include <stdlib.h>
#include <stdio.h>
#define MAX_SIZE 100
#define OK 0
#define ERROR -1

typedef struct tagSqList
{
int element[MAX_SIZE];
unsigned size;
} SqList;

int Initial(SqList *pL) // 定義指針變數用*,&在C裡面是用來取地址的
{
// 通過指針變數訪問結構體中的欄位,應該使用->運算符,而不是通常的點運算符
pL->size = 0;

return OK;
}

int main(void)
{
SqList L;
Initial(&L); // 把變數的地址傳遞給指針形參
printf("%d\n", L.size);
return OK;
}

③ C語言數據結構順序表初始化程序

你的SqList結構包含的元素是一個100個int類型的數組,和一個int變數。
在初始化函數中,首先參數sqlist *L,應該改成Sqlist *L
然後你給L->Elem_array進行賦值操作是不對的,因為Elem_array是數組首地址,是個常量,不能進行賦值操作。而且本身結構裡面定義的是數組元素,所以已經有空間了,根本不需要再另外申請內存。如果需要動態申請內存,就把Elem_array聲明為指針類型:ElemType *pElem_array

④ 請問初始化順序表時,順序表長度為什麼要置零(C語言)

順序表長度等於順序表中元素的個數。初始化順序表時,裡面是沒有元素的,所以必須要將長度置零。

⑤ c語言實現順序表

--順序表.h
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FLASE 0
typedef int Elemtype;
typedef int Status;

/*介面定義
Status InitList_Sq(SqList &L,int size,int inc);
void CreateList_Sq(SqList &L);
void print_Sq(SqList &L);
int Search_Sq(SqList L, Elemtype e);
Status DestroyList_Sq(SqList &L);
Status ClearList_Sq(SqList &L);
Status ListEmpty_Sq(SqList L);
int ListLength_Sq(SqList L);
Status GetElem_Sq(SqList L, int i, Elemtype &e);
Status PutElem_Sq(SqList &L, int i, Elemtype e);
Status Append_Sq(SqList &L, Elemtype e);
Status DeleteLast_Sq(SqList &L, Elemtype &e);
*/
--------------------
#include "順序表.h"

//定義順序表類型
typedef struct {
Elemtype *elem;
int length;
int listsize;
int increment;
}SqList;

//初始化順序表
Status InitList_Sq(SqList &L,int size,int inc) {

L.elem = (Elemtype *)malloc(size * sizeof(Elemtype));
L.length = 0;
L.listsize = size;
L.increment = inc;
return TRUE;
}

//創建順序表
Status CreateList_Sq(SqList &L) {
int i;
printf("請輸入你要創建的順序表元素個數:\n");
scanf_s("%d", &L.length);
if (L.length >= L.listsize) {
L.elem = (Elemtype *)realloc(L.elem, (L.listsize + L.increment) * sizeof(Elemtype));
}
if (!L.elem) {
return FLASE;
}
printf("請輸入你要創建的順序表:\n");
for (i = 0; i<L.length; i++) {
scanf_s("%d", &L.elem[i]);
}
}

//遍歷順序表
void print_Sq(SqList &L) {
int i;
for (i = 0; i<L.length; i++) {
printf("%4d", L.elem[i]);
}
}

//查找元素的位置
int Search_Sq(SqList L, Elemtype e) {
int i = 0;
while (L.elem[i] != e&&i<L.length) {
i++;
}
if (i>L.length)
return -1;
else
return i + 1;//因為C語言是從下標為0開始的,當i=0時表示第一個元素
}

//銷毀順序表
Status DestroyList_Sq(SqList &L) {
if (L.elem == NULL)
return -1;
else
free(L.elem);
printf("\n銷毀成功\n");
return TRUE;
}

//清空順序表
Status ClearList_Sq(SqList &L) {
if (L.elem == NULL)
exit(0);
int i;
Elemtype *p_elem = L.elem;
for (i = 0; i<L.length; i++) {
*L.elem = NULL;
L.elem++;
}
L.elem = p_elem;
}

//判斷順序表是否為空
Status ListEmpty_Sq(SqList L) {
int i;
Elemtype* p_elem = L.elem;
for (i = 0; i<L.length; i++) {
if (*L.elem != 0) {
L.elem = p_elem;
return FLASE;
}
L.elem++;
}
return TRUE;
}

//求順序表的長度
int ListLength_Sq(SqList L) {
return L.length;
}

//用e返回順序表L中第i個元素的值
Status GetElem_Sq(SqList L, int i, Elemtype &e) {
int j;
Elemtype* p_elem = L.elem;
if (i<1 || i>L.length)
return FLASE;
for (j = 1; j <= i; j++)
L.elem++;
e = *L.elem;
L.elem = p_elem;
return TRUE;
}

//將順序表L中第i個元素賦值為e
Status PutElem_Sq(SqList &L, int i, Elemtype e) {
L.elem[i - 1] = e;
return TRUE;
}

//在順序表L表尾添加元素e
Status Append_Sq(SqList &L, Elemtype e) {

L.elem[L.length] = e;
L.length++;
L.listsize += L.increment;
return TRUE;
}

//刪除順序表L表尾元素
Status DeleteLast_Sq(SqList &L, Elemtype &e) {
e = L.elem[L.length - 1];
L.length--;
return TRUE;
}

********************************************主函數.c*************************************************

#include <stdio.h>
#include <stdlib.h>
#include "順序表.h"
#include "源代碼.h"

//--------------------主函數入口--------------------

int main(){
SqList L;
int size, inc;
int e;
int a;
int length;
int i;
int temp;
int j=10;
int ee;
printf("\n--------------------順序表初始化------------------\n");
printf("請輸入順序表的長度size以及擴容量:\n");
scanf_s("%d %d", &size, &inc);
InitList_Sq(L, size, inc);
CreateList_Sq(L);

printf("\n--------------------判斷是否為空------------------\n");

if(ListEmpty_Sq(L)){
printf("該順序表為空\n");
}
else
printf("該順序表不為空\n");

printf("\n--------------------遍歷順序表--------------------\n");

printf("此時順序表為:\n");
print_Sq(L);

printf("\n--------------------查找元素----------------------\n");

printf("\n請輸入要查找的元素:\n");
scanf_s("%d",&e);
a = Search_Sq(L, e);
printf("%d為第%d位:\n",e,a);

printf("\n--------------------輸出長度----------------------\n");

length = ListLength_Sq(L);
printf("順序表的長度為%d\n",length);

printf("\n----------將順序表L中第i個元素賦值為temp----------\n");

printf("請輸入第i個元素的i值和temp值:\n");
scanf_s("%d %d",&i,&temp);
PutElem_Sq(L, i, temp);
printf("\n此時順序表為:\n");
print_Sq(L);

printf("\n---------------在順序表表尾添加元素---------------\n");

Append_Sq(L, j);
printf("\n此時順序表為:\n");
print_Sq(L);

printf("\n---------------在順序表表尾刪除元素---------------\n");

DeleteLast_Sq(L, ee);
printf("\n被刪除的元素為%d\n",ee);
printf("此時順序表為:\n");
print_Sq(L);

printf("\n-------------------清空順序表---------------------\n");

ClearList_Sq(L);
if(ListEmpty_Sq(L)){
printf("\n清空成功\n");
}

printf("\n------------------銷毀順序表----------------------\n");

DestroyList_Sq(L);
getchar();
getchar();
return 0;
}

⑥ C語言(數據結構)順序表的初始化

肯定是要分配空間的,你第一個程序的initsqlist函數中聲明的結構體指針(Sqlist *a;),而第二個程序的initsqlist函數中是聲明的結構體(Sqlist a;),前者只是在計算機內存中聲明一個指針,而不會給這個指針分配內存空間,所以你初始化的時候要給這個指針用malloc函數分配空間,而後者是實實在在的定義了一個結構體,在內存在不僅僅是一個地址,還分配了空間,就像你定義了一個數組一樣,已經在內存存在空間了,不需要再分配了。
總體來說就是你定義的是指針的話就要分配空間。

你的2個程序都是對的,但是一般用第一種定義鏈表!!!

⑦ C語言順序表的初始化和取值這串代碼哪裡出問題了,誰來解釋一下

1、你報錯的原因是因為main函數裡面的SqList *L沒有初始化(沒有開辟內存),應該修改為SqList *L = new SqList;
2、你的void PrintList(SqList *L)裡面,輸出的是L->elem[i],但是你CreateList(SqList *L)函數裡面,記錄的卻是scanf("%d",&L->a[i]);,這樣你輸出的就全是沒有初始化的亂碼了。
純手打,還把你發的代碼自己整理了一遍。。。望採納~
程序修改之後如下:
#include <stdlib.h>
#include <stdio.h>

#define MAXSIZE 100
#define LISTINCREMENT 10

typedef int Elemtype;
typedef int Status;

typedef struct{
Elemtype *elem;
int length;
int a[MAXSIZE];
} SqList;

Status Inilist(SqList *L)
{
L->elem=(Elemtype*)malloc(MAXSIZE*sizeof(Elemtype));
L->length=0;
return 1;
}

void CreateList(SqList *L)
{
int i;
printf("請輸入你要創建的順序表元素個數");
scanf("%d",&L->length);
printf("請輸入你要創建的順序表:\n");
for(i=0; i<L->length; i++)
scanf("%d",&L->a[i]);
}

void PrintList(SqList *L)
{
int i;
for(i=0; i<L->length; i++)
printf("%3d",L->a[i]/*elem[i]*/);
}

int main()
{
//SqList *L;
SqList *L = new SqList;
Inilist(L);
CreateList(L);
PrintList(L);
return 0;
}

⑧ 順序表的初始化怎麼用C語言實現舉個例子,不勝感激

你所說的順序表就是指單向鏈表吧。舉個例子:
聲明:typedef struct queue{
int data;
struct queue * next;
}queuetype; //定義結構體類型
typedef queuetype * pqueuetype; //定義結構體指針類型
pqueuetype front,rear; //聲明鏈表頭指針和尾指針

操作:
void queueinital(){
front=NULL;
rear=NULL; }
這一段函數就是所謂的單向鏈表的初始化,即將鏈表頭指針和尾指針都賦值為空而已。如果你指的是將鏈表各個單元中的所有數據初始化,那需要先明白一個問題,鏈表各單元並不是先申請空間再等待你輸入值的,而是,你有一個值,程序申請空間,然後將值寫入。看一下下面的入隊函數:
void inqueue(int x){
pqueuetype p=(pqueuetype)malloc(sizeof(queuetype));
p->data=x;
p->next=NULL;
if(rear==UNLL){
rear=p;
front=p;
}
else{
rear->next=p;
rear=p;}
}
}
通過這個入隊函數,將值寫入鏈表,鏈表根據你寫入值的多少一個個申請空間,改變長度,通過所有指針將所有數據單元相連。實現單向順序鏈表結構。

⑨ C語言動態順序表初始化

問題就在調用ini的時候出現的。因為L在使用時未分配空間,只是使用的一個臨時指針變數,引用的時候出現非法地址訪問。改一個地方即可!

⑩ c語言 順序表的初始化 誰能幫我看一下我的程序應該怎麼改謝謝大家了!

/*單詞有錯誤,符號少寫,漏寫,這么低級的錯誤,自己都不願意自己動手,還是勸手不要學習了*/

#include<stdio.h>
#include<malloc.h>

typedefintelem;
typedefstruct
{
elem*p;
intlength;
intcapacity;
}list;
voidinitlist(list*l,intcapacity)
{
// l->p(elem*)malloc(capacity*sizeof(elem))
l->p=(elem*)malloc(capacity*sizeof(elem));
l->length=0;
l->capacity=capacity;
}
voidappend(list*l,elemn)
{
if(l->capacity==l->length)
printf("false ");
l->p[l->length]=n;
l->length++;
}
voidshowlist(list*l)
{
inti;
for(i=0;i<l->length;i++)
printf("%d",l->p[i]);
printf(" ");
}
intinsertitem(list*l,intp,elemn)
{
inti;
if(l->capacity==l->length)
return0;
if(p<1||p>l->length)
return0;
p--;
for(i=l->length;i>p;i--)
l->p[i]=l->p[i-1];
l->p[p]=n;
l->length++;
return1;
}
intdeleteitem(list*l,intp)
{
inti;
if(p<1||p>l->length)
return0;
p--;
for(i=p;i<l->length-1;i++)
l->p[i]=l->p[i+1];
l->length--;
return1;
}
voidclearlist(list*l)
{
free(l);
l->capacity=0;
l->length=0;
}
intmain()
{
listlist1;
inti;
initlist(&list1,10);
for(i=0;i<9;++i)
append(&list1,i);
showlist(&list1);
deleteitem(&list1,6);
showlist(&list1);
clearlist(&list1);
return0;
}

熱點內容
gp資料庫庫 發布:2024-05-03 22:12:43 瀏覽:873
壓縮點點 發布:2024-05-03 22:12:33 瀏覽:380
有哪些編程比賽 發布:2024-05-03 22:03:45 瀏覽:263
怎麼根據配置調整游戲解析度 發布:2024-05-03 22:02:50 瀏覽:77
小鳥醬265g資源密碼多少啊 發布:2024-05-03 21:32:08 瀏覽:653
三國戰紀游戲華為帳號密碼是多少 發布:2024-05-03 21:22:54 瀏覽:950
變頻壓縮機啟動 發布:2024-05-03 21:17:06 瀏覽:436
建立雲存儲 發布:2024-05-03 21:04:03 瀏覽:76
socket編程php 發布:2024-05-03 20:12:50 瀏覽:208
坦洲郵政局可以解壓嗎 發布:2024-05-03 20:09:55 瀏覽:733