當前位置:首頁 » 編程語言 » 用c語言構造一個空的線性表
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用c語言構造一個空的線性表

發布時間: 2022-05-12 07:09:11

❶ 【100分】數據結構——使用c語言(線性表)

//c++的頭文件,我是用c++編寫的,有一些該成了C但是有些輸入輸出沒有改
//希望樓主不要建議哦,費了很久的時間寫的啊!
#include<iostream>//c++的頭文件
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define error 0
#define OVERFLOW 1
#define OK 1
using namespace std;//c++的一個指令
typedef struct
{
int *elem; //存儲空間基址
int length; //當前長度
int listsize;//當前分配的存儲容量
// (以sizeof(ElemType)為單位)
//int *next;
}sqlist;

void initList(sqlist &La)
{//構造一個空線性表L
La.elem=(int *) malloc(100 *sizeof(int));//分配空間
if (!La.elem) exit(-2);//未分配則 跳出;
La.length=0;
La.listsize= 100 ;
}

int Listinsert_sq(sqlist &L,int i,int e) // listinsert_sq;插入一個元素
{int *newbase;int *p,*q;
if (i<1 || i>L.length+1) return error;
if (L.length>=L.listsize)//空間不足追加
{newbase=(int*) realloc(L.elem,(L.listsize+10) *sizeof(int));
if (!newbase)
exit(-2);
L.elem=newbase; L.listsize+=10 ;
return 0;
}
q=&(L.elem[i-1]);//指針指向確定插入的位子
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;//指針後移
*q=e; //實現元素的插入
++L.length;
return 0;
}
int ListDelete_sq(sqlist &L,int i)//刪除i位子的元素
{int *p,*q;
if((i<1)||(i>L.length)) return 0;
p=&(L.elem[i-1]);
//e=*p;
cout<<"被刪除的值是:"<<*p<<endl;
for(q=&(L.elem[L.length-1]);p<q;p++)
*p =*(p+1);//指針前移,覆蓋前面的存儲的數據
--L.length;
return 1;
}
int Getelem(sqlist &L)//輸入表的數據
{ int n;
cout<<"輸入數列的個數:"<<endl;
cin>>n;
printf("按大小順序輸入n個數:");//cout<<"按大小順序輸入n個數:";
if(n<0||n>L.listsize ) return 0;
for(int i=0;i<n;i++)//循環輸入元素
{ cin>>L.elem [i];
L.length ++;//表長度
}
cout<<"這數列的長度:"<<L.length <<endl;
return 1;
}
int Poplist(sqlist &L)//輸出函數
{
for(int j=0;j<L.length ;j++)
cout<<L.elem[j]<<" ";
printf("\n");//cout<<endl;
return 0;
}
void ListMerge(sqlist La,sqlist Lb, sqlist &Lc)//合並函數,
{ int *pa,*pb,*pa_list ,*pb_list,*pc;
pa=La.elem;pb=Lb.elem;//用pa和pb指向表頭
Lc.length=La.length+Lb.length;
Lc.listsize=Lc.length;
Lc.elem=(int *)malloc(Lc.listsize*sizeof(int ));//合理分配Lc的空間
if(!Lc.elem) exit(-2);
pa_list=&(La.elem[La.length-1]);pb_list=&(Lb.elem[Lb.length-1]);//用pa-list和pb_list指向表未
pc=Lc.elem;
while(pa<=pa_list&&pb<=pb_list)//合並演算法
{ if(*pa>=*pb){ *pc++=*pb++;*pc++=*pa++;}

//if(*pa=*pb){ *pc++=*pa++;*pc++=*pb++; }

else {*pc++=*pa++;*pc++=*pb++;}
}
while(pa<=pa_list) *pc++=*pa++;//插入剩餘的元素;
while(pb<=pb_list) *pc++=*pb++;
}
int main()
{ sqlist La,Lb,Lc;int i,e;
initList(La);
Getelem(La);
initList(Lb);
Getelem(Lb);
ListMerge(La,Lb,Lc);
Poplist(Lc);
printf("input munber 要刪除的位子i \n:");
scanf("%d",&i);// cin>>i;
ListDelete_sq(La,i);
Poplist(La);//我這里是用表La做例子。也可用Lb。。。
printf("輸出要插入的位子和元素:\n");
scanf("%d%d",&i,&e);//cin>>i>>e;
Listinsert_sq(Lb,i,e);
Poplist(Lb);//我這里是用表Lb做例子。也可用La。。。
return 0;
}
終於全搞定了,還有些不足,希望對樓主有用!

❷ 數據結構中,怎麼用C語言構造線性表!

#define
OK
1
#define
ERROR
-1
#define
MAX_SIZE
100
typedef
int
Status
;
typedef
int
ElemType
;
typedef
struct
sqlist
{
ElemType
Elem_array[MAX_SIZE]
;
int
length
;
}
SqList
;
以上為線性表建立的相關定義
Status
Init_SqList(
SqList
*L
)
{
L->elem_array=(
ElemType
*
)malloc(MAX_SIZE*sizeof(
ElemType
)
)
;
if
(
!L
->
elem_array
)
return
ERROR
;
else
{
L->length=
0
;
return
OK
;
}
}
以上為線性表初始化函數
有以上兩部分可構造一個線性表

❸ 在C語言中,如何構造一個空的順序線性表,然後怎麼用

#include
#define
MAXSIZE
100
struct
List
{
int
L[MAXSIZE];
int
top;
};
int
Init()//top指針初始化為0
{
int
top;
top=0;
return
top;
}
void
Input(struct
List
*t,int
p,int
n)//輸入n個數據
{
if(n==0||n>=MAXSIZE)printf("空隊列\n");
else
for(p=0;p
L[p]);
}
void
Output(struct
List
*s,int
i,int
m)//輸出m(=n)個數據哈
{
if(m==0||m>=MAXSIZE)printf("無法輸出\n");
else
for(i=0;i
L[i]);
}
void
main()
{
struct
List
r;
int
n,m;
scanf("%d",&n);
m=Init();
Input(&r,m,n);
Output(&r,0,n);
}

❹ 用C語言創建一個空線性表,並完成插入刪除等基本操作,可就是不知道怎麼改了,求大神幫忙改到能運行!

親,你用的是順序表的結構體和初始化,其它用的卻是鏈表的操作,建議多看看數據結構的書。

❺ C語言數據結構:Status InitList(LinkList &L)是構造一個空的線性表的正確

改成linklist *L試試

❻ 求構建一個線性表的完整程序 數據結構C語言版

#include "stdafx.h"
#define maxSize 100
typedef int elemType;
#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
struct SeqList {
elemType *list;
int size;
int LmaxSize;
};

/* 初始化線性表L,即進行動態存儲空間分配並置L為一個空表 */
void initList(struct SeqList *L, int ms)
{
/* 檢查ms是否有效,若無效的則退出運行 */
if(ms <= 0){
printf("MaxSize非法!");
exit(1); /* 執行此函數中止程序運行,此函數在stdlib.h中有定義 */
}
L->LmaxSize = ms; /* 設置線性表空間大小為ms */
L->size = 0;
L->list = (int *)malloc(ms * sizeof(elemType));
if(!L->list){
printf("空間分配失敗!");
exit(1);
}
return;
}

/* 空間擴展為原來的2倍,並由p指針所指向,原內容被自動拷貝到p所指向的存儲空間 */
void againMalloc(struct SeqList *L)
{
elemType *p = (int *)realloc(L->list, 2 * L->LmaxSize * sizeof(elemType));
if(!p){ /* 分配失敗則退出運行 */
printf("存儲空間分配失敗! ");
exit(1);
}
L->list = p; /* 使list指向新線性表空間 */
L->LmaxSize = 2 * L->LmaxSize; /* 把線性表空間大小修改為新的長度 */
}

/* 清除線性表L中的所有元素,釋放存儲空間,使之成為一個空表 */
void clearList(struct SeqList *L)
{
if(L->list != NULL){
free(L->list);
L->list = NULL;
L->size = L->LmaxSize = 0;
}
return;
}
/* 返回線性表L當前的長度,若L為空則返回0 */
int sizeList(struct SeqList *L)
{
return L->size;
}

/* 判斷線性表L是否為空,若為空則返回1, 否則返回0 */
int emptyList(struct SeqList *L)
{
if(L->size ==0){
return 1;
}
else{
return 0 ;
}
}

/* 返回線性表L中第pos個元素的值,若pos超出范圍,則停止程序運行 */
elemType getElem(struct SeqList *L, int pos)
{
if(pos < 1 || pos > L->size){ /* 若pos越界則退出運行 */
printf("元素序號越界!");
exit(1);
}
return L->list[pos - 1]; /* 返回線性表中序號為pos值的元素值 */
}

/* 順序掃描(即遍歷)輸出線性表L中的每個元素 */
void traverseList(struct SeqList *L)
{
int i;
for(i = 0; i < L->size; i++){
printf("%d ", L ->list[i]);
printf(" ");
}
return;
}

/* 從線性表L中查找值與x相等的元素,若查找成功則返回其位置,否則返回-1 */
int search(struct SeqList *L, elemType x)
{
int i;
for(i = 0; i < L->size; i++){
if(L->list[i] == x){
return i;
}
}
return -1;
}
/* 把線性表L中第pos個元素的值修改為x的值,若修改成功返回1,否則返回0 */
int updatePosList(struct SeqList *L, int pos, elemType x)
{
if(pos < 1 || pos > L->size){ /* 若pos越界則修改失敗 */
return 0;
}
L->list[pos - 1] = x;
return 1;
}

/* 向線性表L的表頭插入元素x */
void inserFirstList(struct SeqList *L, elemType x)
{
int i;
if(L->size== L->LmaxSize){ /* 重新分配更大的存儲空間 */
againMalloc(L);
}
for(i = L->size - 1; i >= 0; i--)/*元素後移*/
L->list[i + 1] = L ->list[i];
L->list[0] = x;
L->size ++;
}

/* 向線性表L的表尾插入元素x */
void insertLastList(struct SeqList *L, elemType x)
{
if(L->size == L ->LmaxSize){ /* 重新分配更大的存儲空間 */
againMalloc(L);
}
L->list[L->size] = x; /* 把x插入到表尾 */
L->size++; /* 線性表的長度增加1 */
return;
}

/* 向線性表L中第pos個元素位置插入元素x,若插入成功返回1,否則返回0 */
int insertPosList(struct SeqList *L, int pos, elemType x)
{
int i;
if(pos < 1 || pos > L->size + 1){ /* 若pos越界則插入失敗 */
return 0;
}
if(L->size == L->LmaxSize){ /* 重新分配更大的存儲空間 */
againMalloc(L);
}
for(i = L->size - 1; i >= pos - 1; i--){
L->list[i + 1] = L->list[i];
}
L->list[pos - 1] = x;
L->size++;
return 1;
}

/* 向有序線性表L中插入元素x,使得插入後仍然有序*/
void insertOrderList(struct SeqList *L, elemType x)
{
int i, j;
/* 若數組空間用完則重新分配更大的存儲空間 */
if(L->size == L->LmaxSize){
againMalloc(L);
}
/* 順序查找出x的插入位置 */
for(i = 0; i < L->size; i++){
if(x < L->list[i]){
break;
}
}
/* 從表尾到下標i元素依次後移一個位置, 把i的位置空出來 */
for(j = L->size - 1; j >= i; j--)
L->list[j+1] = L->list[j];
/* 把x值賦給下標為i的元素 */
L->list[i] = x;
/* 線性表長度增加1 */
L->size++;
return;
}
/* 從線性表L中刪除表頭元素並返回它,若刪除失敗則停止程序運行 */
elemType deleteFirstList(struct SeqList *L)
{
elemType temp;
int i;
if(L ->size == 0){
printf("線性表為空,不能進行刪除操作! ");
exit(1);
}
temp = L->list[0];
for(i = 1; i < L->size; i++) /* 元素前移 */
L->list[i-1] = L->list[i];
L->size--;
return temp;
}

/* 從線性表L中刪除表尾元素並返回它,若刪除失敗則停止程序運行 */
elemType deleteLastList(struct SeqList *L)
{
if(L ->size == 0){
printf("線性表為空,不能進行刪除操作! ");
exit(1);
}
L->size--;
return L ->list[L->size]; /* 返回原來表尾元素的值 */
}

/* 從線性表L中刪除第pos個元素並返回它,若刪除失敗則停止程序運行 */
elemType deletePosList(struct SeqList *L, int pos)
{
elemType temp;
int i;
if(pos < 1 || pos > L->size){ /* pos越界則刪除失敗 */
printf("pos值越界,不能進行刪除操作! ");
exit(1);
}
temp = L->list[pos-1];
for(i = pos; i < L->size; i++)
L->list[i-1] = L->list[i];
L->size--;
return temp;
}

/* 從線性表L中刪除值為x的第一個元素,若成功返回1,失敗返回0 */
int deleteValueList(struct SeqList *L, elemType x)
{
int i, j;
/* 從線性表中順序查找出值為x的第一個元素 */
for(i = 0; i < L->size; i++){
if(L->list[i] == x){
break;
}
}
/* 若查找失敗,表明不存在值為x的元素,返回0 */
if(i == L->size){
return 0;
}
/* 刪除值為x的元素L->list[i] */
for(j = i + 1; j < L->size; j++){
L->list[j-1] = L->list[j];
}
L->size--;
return 1;
}

int main(int argc, char* argv[])
{

struct SeqList * ListPerson;
int Listsize=10;
int i;
int num;

ListPerson=(SeqList*)malloc(sizeof(SeqList)); //這句話很重要
initList(ListPerson,Listsize);

for (i=0;i<10;i++)
{
inserFirstList(ListPerson, i);
}

for (i=0;i<5;i++)
{
inserFirstList(ListPerson, i);
}

num=sizeList(ListPerson);

for (i=0;i<num;i++)
{
printf(" %d ", ListPerson->list[i]);
}

printf("\n");
insertPosList(ListPerson, 5, 100);

num=sizeList(ListPerson);

for (i=0;i<num;i++)
{
printf(" %d ", ListPerson->list[i]);
}

return 0;

}

❼ C語言這種結構體如何構造一個空的線性表L

函數main()里的語句LinkListL;系統自動給變數L分配了內存,
L對應的是第2個結構體,也就是LinkList.
調用初始化函數InitList(),給變數L里的成員head,tail,len進行賦值,
L.head指向的就是空鏈表,此時,L.head=NULL,同時,L.len=0,表示沒有結點.
所以執行函數InitList()之後,也就製造了空鏈表.

執行函數InsertNode()之後,鏈表就加入了新結點,結點對應的是第1個結構體,也就是LNode
L.head指向鏈表的頭結點,L.tail指向鏈表的末尾結點,L.len表示結點的數量.

測試結果:

初始化之後,鏈表長度是0
插入數據之後,鏈表長度是3
鏈表裡的數據是:102030


//代碼用了"引用"(&),所以要用C++編譯器進行測試
#include<stdio.h>
#include<stdlib.h>

typedefintElemType;
typedefintStatus;

typedefstructLNode
{
ElemTypedata;
structLNode*next;
}*Link,*Position;

typedefstruct
{
Linkhead,tail;
intlen;
}LinkList;

StatusInitList(LinkList&L);
StatusInsertNode(LinkList&L,ElemTypee);
StatusListTraverse(LinkListL);
intListLength(LinkListL);

//鏈表初始化
StatusInitList(LinkList&L)//&是"引用"符號
{
L.head=NULL;
L.tail=NULL;
L.len=0;
return1;
}

//插入結點
StatusInsertNode(LinkList&L,ElemTypee)//&是"引用"符號
{
LNode*newNode;

newNode=(LNode*)malloc(sizeof(LNode));
if(newNode==NULL)
{
printf(" 分配內存錯誤. ");
exit(1);
}
newNode->data=e;
newNode->next=NULL;
//用"尾插法"添加新結點
if(L.head==NULL)
{
L.head=newNode;
L.tail=newNode;
L.len=1;
}
else
{
L.tail->next=newNode;
L.tail=newNode;
L.len=L.len+1;
}
return1;
}

//鏈表遍歷
StatusListTraverse(LinkListL)
{
Linkp;
p=L.head;
if(p==NULL)
{
printf(" 鏈表為空. ");
return0;
}
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf(" ");
return1;
}

//鏈表長度
intListLength(LinkListL)
{
returnL.len;
}

intmain()
{
LinkListL;

InitList(L);

printf("初始化之後,鏈表長度是%d ",ListLength(L));

InsertNode(L,10);
InsertNode(L,20);
InsertNode(L,30);

printf("插入數據之後,鏈表長度是%d ",ListLength(L));

printf("鏈表裡的數據是:");
ListTraverse(L);

return0;
}

❽ 在C語言中,如何構造一個空的順序線性表,然後怎麼用

#include<stdio.h>
#define MAXSIZE 100
struct List
{
int L[MAXSIZE];
int top;
};
int Init()//top指針初始化為0
{
int top;
top=0;
return top;
}
void Input(struct List *t,int p,int n)//輸入n個數據
{
if(n==0||n>=MAXSIZE)printf("空隊列\n");
else
for(p=0;p<n;p++)
scanf("%d",&t->L[p]);
}
void Output(struct List *s,int i,int m)//輸出m(=n)個數據哈
{

if(m==0||m>=MAXSIZE)printf("無法輸出\n");
else
for(i=0;i<m;i++)
printf("%d ",s->L[i]);
}
void main()
{
struct List r;
int n,m;
scanf("%d",&n);
m=Init();
Input(&r,m,n);
Output(&r,0,n);
}

❾ c語言中創建線性表問題

因為你的p沒有初始化,printf 裡面d與,後面的&。。不匹配
#include<stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100 //線性表存儲空間的初始分配量
#define LISTINCREMENT 10 //線性表存儲空間的分配量
typedef int ElemType[LIST_INIT_SIZE];
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
typedef int Status;
int InitList_Sq(SqList L)
{
//構造一個空的線性表L。
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem){return 0;}
L.length=0;
printf("%d\n",L.length);
L.listsize=LIST_INIT_SIZE;
return 1;
}
int main()
{
int t=0;
SqList p={};
InitList_Sq(p);
printf("%d\n",p.length);
return 0;

❿ C語言建立一個空線性表,輸出結果本應該為「a=19 b=0 c=0」,可是實際運行結果為「a=19 b=17753914 c=-2

你使用c語言寫的,因而不存在引用的問題。因而在函數InitList_Sq函數中,你的形參有問題,應該改為指針。
函數聲明應該int InitList_Sq(SqList *L)
在調用函數的時候,應該改為InitList_Sq(&firstL);
這么改了之後,InitList_Sq函數的實現部分,不再是L.element而是L->element,依次類推。