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

c語言創建兩個線性表

發布時間: 2022-05-25 13:36:09

A. 怎樣創建線性表(c語言

線性表是個抽象的概念,沒辦法直接創建抽象類型,需要具體的類型(比如數組,鏈表)。
比如創建數組:int array[100];
創建一個GList鏈表: GList * list = NULL; (空的)

B. 如何用c程序建立兩個線性表並把他們合並成一個線性表

從鍵盤輸入兩個鏈表,通過程序對他們排序,之後按遞增順序合並鏈表

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#define NULL 0

struct List
{
int data;
struct List *next;
}List;

struct List * InitList()
{
struct List *head,*p,*q;
int d;
head=(struct List *)malloc(sizeof(struct List));
head->next=NULL;
p=head;
scanf("%d",&d);
while(d>0)
{
q=(struct List *)malloc(sizeof(struct List));
q->next=NULL;
q->data=d;
p->next=q;
p=p->next;
scanf("%d",&d);
}
return head;

}

void ListChooseSort(struct List *head)
{
struct List *p,*q;
int t;
if(head->next!=NULL)
{
for(p=head->next;p->next;p=p->next)
for(q=p->next;q;q=q->next)
if(q->data<p->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}

struct List * UniteList(struct List *a,struct List *b)
{
struct List *U_head,*p,*q,*s;
U_head=(struct List *)malloc(sizeof(struct List));
U_head->next=NULL;
p=a->next;
q=b->next;
s=U_head;
while(p&&q)
{
if(p->data>q->data)
{
s->next=q;
q=q->next;
}
else
{
s->next=p;
p=p->next;

}
s=s->next;
}
if(p==NULL)s->next=q;
else s->next=p;
return U_head;

}

void ListPrint(struct List *head)
{
struct List *p;
p=head->next;
printf("\n\n");
while(p)
{
printf("%5d",p->data);
p=p->next;
}
printf("\n\n");
}

void main ()
{
struct List *a_head,*b_head,*Unite_head;
printf("\n創建鏈表a:\n\n");
a_head=InitList();
printf("\n鏈表a:");
ListPrint(a_head);
system("pause");
system("cls");
printf("\n創建鏈表b:\n\n");
b_head=InitList();
printf("\n鏈表b:");
ListPrint(b_head);
system("pause");
system("cls");
ListChooseSort(a_head);
printf("\n遞增排序後的鏈表a:");
ListPrint(a_head);
ListChooseSort(b_head);
printf("遞增排序後的鏈表b:");
ListPrint(b_head);
Unite_head=UniteList(a_head,b_head);
printf("合並後的鏈表為:");
ListPrint(Unite_head);
}

C. 創建並合並兩個線性表 C語言

其中一個程序調用另一個程序的方式,使用系統調用system可以。
如果兩個程序要交換使用數據,可以用建立文件作為數據交換的「通道」。
如果你不知道這兩個程序的代碼,那麼就新建一個可以調用這兩個已知程序的程序吧

D. 線性表的基本操作c語言實現

代碼如下:

頭文件:

2_1.h

#ifndef _2_1_H

#define _2_1_H

typedef void SeqList;

typedef void SeqListNode;

//創建線性表

SeqList * SeqList_Create(int capacity);

//銷毀線性表

void SeqList_DesTroy(SeqList * list);

void SeqList_Clear(SeqList* list);

int SeqList_Length(SeqList* list);

int SeqList_Capacity(SeqList* list);

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);

SeqListNode* SeqList_Get(SeqList* list, int pos);

SeqListNode* SeqList_Delete(SeqList* list, int pos);

#endif

源文件:

// 順序線性表.cpp : 定義控制台應用程序的入口點。

//

#include "stdafx.h"

#include <malloc.h>

#include <stdlib.h>

#include "2_1.h"

typedef unsigned int TSeqListNode;

typedef struct {

int len; //長度

int capacity;//總長度

TSeqListNode * node;//每個節點的指針

} TSeqList;

int main()

{

SeqList* list = SeqList_Create(5);//創建線性表

int i = 6;//賦值6個變數,已超過線性表最大值 5

int j = 1;

int k = 2;

int x = 3;

int y = 4;

int z = 5;

int index = 0;

SeqList_Insert(list, &i, 7); //將這6個變數插入線性表中

SeqList_Insert(list, &j, 0);

SeqList_Insert(list, &k, 0);

SeqList_Insert(list, &x, 0);

SeqList_Insert(list, &y, 0);

SeqList_Insert(list, &z, 0);

//遍歷

for(index=0; index<SeqList_Length(list); index++)

{

int* p = (int*)SeqList_Get(list, index);

printf("%d ", *p);

}

printf(" ");

//刪除操作

while( SeqList_Length(list) > 0 )

{

int* p = (int*)SeqList_Delete(list, 0);

printf("刪除了: %d ", *p);

}

SeqList_Clear(list);

SeqList_DesTroy(list);

system("pause");

return 0;

}

//創建線性表

SeqList * SeqList_Create(int capacity)

{

TSeqList* ret = NULL ;

if(capacity >= 0)

{

ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*capacity); //為線性表分配空間,包含結 //構體和節點的總大小

}

if(NULL != ret)

{

ret->len = 0;

ret->capacity = capacity;

ret->node = (TSeqListNode*)(ret + 1);//將節點指向上述分配到的空間的後部分

}

return ret;

}

//銷毀

void SeqList_DesTroy(SeqList * list)

{

free(list);

}

//清空

void SeqList_Clear(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

if(NULL != ret)

{

ret->len = 0;

}

}

//獲得線性表的長度

int SeqList_Length(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

int len = -1;

if(NULL != ret)

{

len = ret->len;

}

return len;

}

//線性表的總長度

int SeqList_Capacity(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

int capacity = -1;

if(NULL != ret)

{

ret->capacity = capacity;

}

return capacity;

}

//插入

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos)

{

TSeqList * sList = (TSeqList*)list;

int i,ret = -1;

if((sList != NULL) &&(pos >= 0) && sList->capacity >= sList->len+1)

{

if(pos >= sList->len)

{

pos = sList->len;

}

for(i = sList->len; i > pos; i--)

{

sList->node[i] = sList->node[i-1];

}

sList->node[i] = (TSeqListNode)node;

++sList->len;

ret = 1;

}

return ret;

}

//獲得指定位置的節點

SeqListNode* SeqList_Get(SeqList* list, int pos)

{

TSeqList * sList = (TSeqList*)list;

TSeqListNode* node = NULL;

if(NULL != sList && pos>=0 && pos < sList->len)

{

node = (TSeqListNode*)sList->node[pos];

}

return node;

}

//刪除

SeqListNode* SeqList_Delete(SeqList* list, int pos)

{

TSeqList * sList = (TSeqList*)list;

SeqListNode * node = SeqList_Get( list, pos);

int i;

if(sList != NULL && pos >= 0 && pos< sList->len)

{

for( i=pos+1; i<sList->len; i++)

{

sList->node[i-1] = sList->node[i];

}

sList->len--;

}

return node;

}

演示:

資料拓展:

線性表是最基本、最簡單、也是最常用的一種數據結構。

線性表中數據元素之間的關系是一對一的關系,即除了第一個和最後一個數據元素之外,其它數據元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,循環鏈表邏輯層次上也是一種線性表(存儲層次上屬於鏈式存儲),但是把最後一個數據元素的尾指針指向了首位結點)。

我們說「線性」和「非線性」,只在邏輯層次上討論,而不考慮存儲層次,所以雙向鏈表和循環鏈表依舊是線性表。

在數據結構邏輯層次上細分,線性表可分為一般線性表和受限線性表。一般線性表也就是我們通常所說的「線性表」,可以自由的刪除或添加結點。受限線性表主要包括棧和隊列,受限表示對結點的操作受限制。

線性表的邏輯結構簡單,便於實現和操作。因此,線性表這種數據結構在實際應用中是廣泛採用的一種數據結構。

E. 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;

F. 怎樣在C語言創建線性表

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

typedef char ElemType;

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

void CreatListF(LinkList *&L,ElemType a[],int n) //頭插法建表
{
LinkList *s;int i;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
s->next=L->next;
L->next=s;
}
}

void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建表
{
LinkList *s,*r;int i;
L=(LinkList *)malloc(sizeof(LinkList));
r=L;
for(i=0;i<n;i++)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

void InitList(LinkList *&L) //初始化線性表
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}

void DestroyList(LinkList *&L) //銷毀線性表
{
LinkList *p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}

int ListEmpty(LinkList *L) //判斷線性表是否為空
{
return(L->next==NULL);
}

int ListLength(LinkList *L) //求線性表的長度
{
LinkList *p=L;int n=0;
while(p->next!=NULL)
{
n++;p=p->next;
}
return(n);
}

void DispList(LinkList *L) //輸出線性表
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}

int GetElem(LinkList *L,int i,ElemType &e) //求線性表中某個數據元素值
{
int j=0;
LinkList *p=L;
while(j<i&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
e=p->data;return 1;
}
}

int LocateElem(LinkList *L,ElemType e) //按元素值查找
{
LinkList *p=L->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;i++;
}
if(p==NULL)return(0);
else return(i);
}

int ListInsert(LinkList *&L,int i,ElemType e) //插入數據元素
{
int j=0;
LinkList *p=L,*s;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)return 0;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e; s->next=p->next; p->next=s;
return 1;
}
}

int ListDelete(LinkList *&L,int i,ElemType &e) //刪除數據元素
{
int j=0;
LinkList *p=L,*q;
while(j<i-1&&p!=NULL)
{
j++;p=p->next;
}
if(p==NULL)
return 0;
else
{
q=p->next;
if(q==NULL)return 0;
e=q->data;
p->next=q->next;
free(q);
return 1;
}
}

int main()
{
ElemType e,a[5]={'a','b','c','d','e'};
LinkList *h;

InitList(h); //初始化順序表h
CreateListR(h,&a[0],5); //依次採用尾插入法插入a,b,c,d,e元素
printf("單鏈表為:");
DispList(h); printf("\n"); //輸出順序表h

printf("該單鏈表的長度為:");
printf("%d",ListLength(h)); printf("\n"); //輸出順序表h的長度
if(ListEmpty(h)) printf("該單鏈表為空。\n");
else printf("該單鏈表不為空。\n"); //判斷順序表h是否為空

GetElem(h,3,e);printf("該單鏈表的第3個元素為:");
printf("%c",e); printf("\n"); //輸出順序表h的第3個元素
printf("該單鏈表中a的位置為:");
printf("%d",LocateElem(h,'a')); printf("\n"); //輸出元素'a'的位置

ListInsert(h,4,'f'); //在第4個元素位置插入'f'素
printf("在第4 個元素位置上插入'f'後單鏈表為:");
DispList(h); printf("\n"); //輸出順序表h

ListDelete(h,3,e); //刪除L的第3個元素
printf("刪除第3個元素後單鏈表為:");
DispList(h); printf("\n"); //輸出順序表h

DestroyList(h); //釋放順序表h
return 0;
}

G. 誰會用C語言編寫線性表啊

演算法思想:兩個鏈表中數據的交集也就是把他們相同的數據提取出來;
//創建遞增排序的鏈表

struct Link *CreateLink()
{
struct Link *head=NULL,*p=NULL,*q=NULL;
head = (struct Link *)malloc(sizeof(struct Link));
head->next = NULL;
p = head;
int n=1;
printf("Please input a number(0 exit):\n");
scanf("%d",&n);
while( n != 0)
{
q = (struct Link *)malloc(sizeof(struct Link));
q->data = n;
p = Insert(p,q);
scanf("%d", &n);
}
return head;
}
struct Link *Insert(struct Link *head, struct Link *p)
{
struct Link *h=head,*q=NULL, *pTemp=p;
q = h;
while(q->next != NULL)
{
if ( (q->next->data) >= (pTemp->data) )
{
break;
}
q = q->next;
}
if (q->next != NULL)
{
pTemp->next = q->next;
q->next = pTemp;
}
else
{
q->next = pTemp;
pTemp->next = NULL;
}
return h;
}
//核心功能函數,找出交集
struct Link *Intersect(struct Link *head1, struct Link *head2)
{
struct Link *p1=head1->next,*p2=head2->next;
struct Link *head,*p,*q;
head = (struct Link *)malloc(sizeof(struct Link));
head->next = NULL;
p = head;
while( (p1!=NULL)&&(p2!=NULL) )
{
if (p1->data == p2->data)
{
q = (struct Link *)malloc(sizeof(struct Link));
q->data = p1->data;
q->next = NULL;
p->next = q;
p = q;
p1 = p1->next;
p2 = p2->next;
}
else if (p1->data < p2->data)
{
p1 = p1->next;
}
else
{
p2 = p2->next;
}
}
return head;
}
//輸出鏈表內容

void PrintLink(struct Link *head)
{
struct Link *p = head->next;
printf("\nThe data in link:");
while (p != NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}

int main(int argc, char* argv[])
{
struct Link *h1=NULL,*h2=NULL,*head=NULL;
h1 = CreateLink();
PrintLink(h1);
h2 = CreateLink();
PrintLink(h2);
head = Intersect(h1,h2);
PrintLink(head);
return 0;

}

H. 幫用C語言弄兩個線性表 謝了 挺簡單的

#include <stdio.h>
#include <stdlib.h>

typedef struct _Lnk
{
int num;
struct _Lnk * next;
}LNK, * PLnk;

int * MallocMem(int num);
void InitLnk(PLnk pHead);
void InitArr(int * pArr, int num);
PLnk GetNiLnk(PLnk lnk);
int * GetNiArr(int * arr, int num);
void ShowLnk(char * pstr, PLnk lnk);
void ShowArr(char * pstr, int * arr, int num);

int main(void)
{
// 初始化原始的鏈表
PLnk pHead = (PLnk)malloc(sizeof(LNK));
printf("現在開始輸入鏈表數據\n");
InitLnk(pHead);

// 初始化原始的順序表
int num=0;
char tmp;
while ((tmp=getchar())!='\n')
{
continue;
}
printf("請輸入元素的個數:\n");
scanf("%d", &num);
//printf("指定的元素個數為:%d\n", num);
int * pArr = NULL;
int * pNiArr = NULL;
if (num>0)
{
pArr = MallocMem(num);
InitArr(pArr, num);
}

PLnk pNiLnk = GetNiLnk(pHead);
if (pArr != NULL)
{
pNiArr = GetNiArr(pArr, num);
}

ShowArr("原始順序表:", pArr, num);
if (pNiArr != NULL)
{
ShowArr("倒置順序表:", pNiArr, num);
}
ShowLnk("原始鏈表:", pHead);
ShowLnk("倒置鏈表:", pNiLnk);

return 0;
}

// subfunctions:
int * MallocMem(int num)
{// 為順序表分配內存
int * pArr = (int *)malloc(sizeof(num));

return pArr;
}

void InitLnk(PLnk pHead)
{// 初始化鏈表的值
int tmp = 0;
printf("請輸入數據:(ctrl+x 結束輸入)\n");
while (scanf("%d", &tmp))
{
PLnk newnode = (PLnk)malloc(sizeof(LNK));
newnode->num = tmp;
pHead->next = newnode;
pHead = newnode;
}
pHead->next = NULL;

return;
}

void InitArr(int * pArr, int num)
{// 初始化順序表的值
for(int i=0; i<num; i++)
{
printf("第 %d 數值= ", i+1);
scanf("%d", &pArr[i]);
}

return;
}

PLnk GetNiLnk(PLnk lnk)
{// 獲得鏈表的倒序
PLnk pNi = (PLnk)malloc(sizeof(LNK));
pNi->next = NULL;
PLnk pHead = pNi, pTmp;
while (lnk = lnk->next)
{
pHead->num = lnk->num;
pTmp = pHead;
pHead = (PLnk)malloc(sizeof(LNK));
pHead->next = pTmp;
}

return pHead;
}

int * GetNiArr(int * arr, int num)
{// 獲取順序表的倒序
int * pNi = MallocMem(num);
for (int i=0; i<num; i++)
{
pNi[i] = arr[num-i-1];
}

return pNi;
}

void ShowLnk(char * pstr, PLnk lnk)
{// 顯示鏈表信息
printf("%s\n", pstr);
int i=0;
while (lnk = lnk->next)
{
printf("%d ", lnk->num);
if ((++i)%5==0)
{
printf("\n");
}
}
printf("\n");

return ;
}

void ShowArr(char * pstr, int * arr, int num)
{// 顯示順序表信息
printf("%s\n", pstr);
for (int i=0; i<num; i++)
{
printf("%d ", arr[i]);
if ((i+1)%5==0)
{
printf("\n");
}
}
printf("\n");

return ;
}

在一個程序裡面了
自己運行了下應該沒什麼問題
但是沒有做內存的釋放等操作, 只是簡單的實現了你說的兩個功能

I. C語言,請問我要建立2個或者3個線性表怎麼建有源代碼就好了

  • 這樣做會報錯,並不可以?

  • 不會報錯

  • 不同的變數名對應不同的變數

  • 所以不會報錯

J. 求大神幫忙用C語言寫一個程序。 要求:定義兩個線性表(內容由用戶輸入),合並這兩個線性表,並按順序

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <stdbool.h>

typedef struct{
int *data;
int length; // 線性表的長度
int top; // 線性表的當前元素個數
}List;

// 初始化線性表
void list_init(List *li,int length){
li->length = length;
li->top = 0;
li->data = (int*) malloc(li->length * sizeof(int));
}

// 向線性表插入元素
bool add_list(List* li, int data){
if(li->top >= li->length){
return false;
}

li->data[li->top++] = data;
return false;
}

// 將兩個線性表合並並對元素進行排序
void merge_list(List *dest, List *li1, List *li2){
list_init(dest, li1->top+li2->top+1);
// 把線性表li1,li2的所有元素添加到線性表dest中
int i = 0;
while(i < li1->top){
add_list(dest, li1->data[i]);
i++;
}
i = 0;
while(i < li2->top){
add_list(dest, li2->data[i]);
i++;
}

// 把線性表dest元素進行排序(由大到小)
for(i=0; i<dest->top; i++){
int j;
for(j=i; j<dest->top; j++){
if(dest->data[i] < dest->data[j]){
int t = dest->data[i];
dest->data[i] = dest->data[j];
dest->data[j] = t;
}
}
}
}

// 顯示線性表
void show_list(List *li){
int i;
for(i=0; i<li->top; i++){
printf("%3d",li->data[i]);
if((i+1)%10 == 0){
printf("\n");
}
}
printf("\n");
}

int main(void)
{
int arr1[7]={11,4,7,2,9,15,10};
int arr2[5]={2,1,5,1,19};

List li1;
list_init(&li1, 50);
int i;
for(i=0; i<7; i++){
add_list(&li1,arr1[i]);
}
show_list(&li1);

List li2;
list_init(&li2, 50);
for(i=0; i<5; i++){
add_list(&li2,arr2[i]);
}
show_list(&li2);

List dest;
merge_list(&dest, &li1, &li2);
show_list(&dest);

return 0;

}