c語言實現順序表基本操作是什麼,用c語言實現順序表的各種基本運算

本文目錄一覽:

C語言順序表的基本操作

#include stdio.h

#include stdlib.h

typedef int DataType; // 定義數據數據類型

typedef struct {

DataType *data;   // data指向數據區的首個數據

int length;       // 數據長度

}SqList;

void Sort(SqList *L) {

int i,j,k;

DataType tmp;

for(i = 0; i  L-length – 1; ++i) {

k = i;

for(j = i + 1; j  L-length; ++j)

if(L-data[k]  L-data[j])

k = j;

if(k != i) {

tmp = L-data[k];

L-data[k] = L-data[i];

L-data[i] = tmp;

}

}

}

SqList *CreateList(DataType a[],int n) {

int i;

SqList *L;

L = (SqList *)malloc(sizeof(SqList));

L-data = (DataType *)malloc(n * sizeof(DataType));

L-length = n;

for(i = 0; i  n; ++i) L-data[i] = a[i];

Sort(L);

return L;

}

int InsertList(SqList *L,DataType x) {

int i,j;

for (i = 0;i  L-length;i++) {

if(x = L-data[i]) {

for(j = L-length;j = i;j–)

L-data[j + 1] = L-data[j]; // 結點後移

L-data[i] = x;

L-length++;

return 1;

}

}

L-data[L-length++] = x;

return 1;

}

int RemoveListElem(SqList *L,DataType d) {

int i,j;

for(i = 0; i  L-length; ++i) {

if(L-data[i] == d) {

for(j = i; j  L-length – 1; ++j)

L-data[j] = L-data[j + 1];

L-length–;

return 1;

}

}

return 0;

}

SqList *AndList(SqList *A, SqList *B) {   /* A∩B */

int i,j,k = 0;

int len = (A-length  B-length) ? B-length : A-length;

SqList *C = (SqList *)malloc(sizeof(SqList));

C-length = len;

C-data = (DataType *)malloc(len * sizeof(DataType));

for(i = 0; i  A-length; ++i) {

for(j = 0; j  B-length; ++j) {

if(A-data[i] == B-data[j]) {

C-data[k++] = A-data[i];

break;

}

}

}

C-length = k;

return C;

}

SqList *OrList(SqList *A, SqList *B) {   /* A∪B */

int i,j,flag;

DataType e;

SqList *C = (SqList *)malloc(sizeof(SqList));

C-length = A-length + B-length;

C-data = (DataType *)malloc(C-length * sizeof(DataType));

for(i = 0; i  A-length; ++i) C-data[i] = A-data[i];

for(i = 0; i  B-length; ++i) {

e = B-data[i];

flag = 1;

for(j = 0; j  C-length; ++j) {

if(e == C-data[j]) {

flag = 0;

break;

}

}

if(flag) InsertList(C,e);

}

return C;

}

void PrintList(SqList *L) {

int i;

for(i = 0; i  L-length; ++i)

printf(“%d “,L-data[i]);

printf(“\n”);

}

void FreeList(SqList *L) {

free(L-data);

free(L);

}

void main() {

DataType x;

DataType arra[] = {36,24,31,5,90,65,70,39,37};

DataType arrb[] = {9,8,43,51,37,89,33,46,29,80,56};

int alen = sizeof(arra)/sizeof(arra[0]);

int blen = sizeof(arrb)/sizeof(arrb[0]);

SqList *A = CreateList(arra,alen);

printf(“A線性表為: “);

PrintList(A);

SqList *B = CreateList(arrb,blen);

printf(“B線性表為: “);

PrintList(B);

SqList *C = AndList(A,B);

SqList *D = OrList(A,B);

printf(” C = A∩B: “);

PrintList(C);

printf(” D = A∪B: “);

PrintList(D);

printf(“在D表中插入數據 : “);

scanf(“%d”,x);

InsertList(D,x);

printf(“D表插入x後 :”);

PrintList(D);

printf(“刪除D表中數據 : “);

scanf(“%d”,x);

RemoveListElem(D,x);

printf(“刪除x後的D表為 :”);

PrintList(D);

FreeList(A);

FreeList(B);

FreeList(C);

FreeList(D);

}

使用C語言編寫程序,實現順序表的基本運算——插入和刪除。

typedef struct

{

int *elem;

int length;

int listsize;

} Sqlist;

status Create_sq(Sqlist *L,int n)

{

int i;

L-elem=(int*)malloc(100*sizeof(int));

if(!L-elem) return 0;

for(i=0;in;i++)

scanf(“%d”,(L-elem[i]));

L-length=n;

L-listsize=100;

return 1;

}

status Listinsert_sq(Sqlist *L,int i,int e)

{

int *q,*p,*newbase;

if(i1||iL-length+1) return 0;

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;

}

q=(L-elem[i-1]);

for(p=(L-elem[L-length-1]);p=q;–p)

*(p+1)=*p;

*q=e;

++L-length;

return 1;

}

int main()

{

Sqlist L1;

int n,a;

int i,e;

printf(“\n please input the number of data:\n”);

scanf(“%d”,n);

if(Create_sq(L1,n)==1)

{

scanf(“%d%d”,i,e);

a=Listinsert_sq(L1,i,e);

if(a==1)

printf(“insert success\n”);

else printf(“insert false\n”);

printf(“the list elements are:\n”);

for(i=1;i=L1.length;i++)

{

printf(“%d\t”,L1.elem[i-1]);

}

}

return 0;

}

順序表和鏈表的基本操作,用C語言實現!

順序存儲的線性表的算法

#include “stdio.h”

#include “stdlib.h”

#define Status int

#define OVERFLOW 0

#define TRUE 1

#define FALSE 0

#define OK 1

#define MAXSIZE 100

typedef int ElemType;

typedef struct list

{ElemType elem[MAXSIZE];

int length;

}SqList;

void InitList(SqList L){

L.length=0;

}

/*建立順序表*/

void CreateList(SqList L)

{

int i;

printf(“input the length”);

scanf(“%d”,L.length);//輸入表長

for(i=1;i=L.length;i++)

scanf(“%d”,L.elem[i-1]);//輸入元素

}

//順序表的遍歷

void printdata(ElemType e){

printf(“%4d”,e);

}

void Traverse(SqList L,void (*visit)(ElemType e))

{ int i;

printf(“The elements of the lists are:\n”);

for(i=1;i=L.length;i++){

if (i%10==0)printf(“\n”);//每行顯示10個元素

visit(L.elem[i-1]);//輸出表中元素

}

printf(“\n”);

}

//有序順序表L中插入元素e使序列仍有序

void Insert(SqList L,ElemType e)

{int i,j;

if (L.length==MAXSIZE)exit(OVERFLOW);//表滿,不能插入

for(i=1;i=L.lengthL.elem[i-1]=e;i++);//向後查找

for(j=L.length;j=i;j–)

L.elem[j]=L.elem[j-1];//元素後移

L.elem[i-1]=e;//插入e

L.length=L.length+1;//表長加1

}

//建立遞增有序的順序表

void CreateList_Sorted(SqList L)

{int i,num;

ElemType e;

L.length=0;

printf(“Create a sorted list,Input the length of the list\n”);

scanf(“%d”,num);

printf(“Input the data %d numbers\n”,num);

for(i=1;i=num;i++){

scanf(“%d”,e);

Insert(L,e);

}

}

/*Merge two sorted lists*/

void MergeList(SqList La,SqList Lb,SqList Lc)

{int *pa,*pb,*pc;

if (La.length+Lb.lengthMAXSIZE) exit(OVERFLOW);

else

{pa=La.elem;pb=Lb.elem;pc=Lc.elem;

while (paLa.elem+La.lengthpbLb.elem+Lb.length)

*pc++=(*pa=*pb)?*pa++:*pb++;/*公共部分合併*/

while (paLa.elem+La.length) *pc++=*pa++;

/*R1表的剩餘部分放到R的後部*/

while (pbLb.elem+Lb.length) *pc++=*pb++;

/*R2表的剩餘部分放到R的後部*/

Lc.length=La.length+Lb.length;/*R表長*/

}

}

//判斷元素是否對稱,對稱返回TRUE 否則返回FALSE

Status Symmetric(SqList L)

{int low,high;

low=0;

high=L.length-1;

while(lowhigh)

if (L.elem[low]==L.elem[high]){low++;high–;}

else return(FALSE); return(TRUE); }

//順序表的主函數部分

//#include “seqlist.h”

void main()

{SqList L1,L2,L;

int select;

ElemType e;

do{printf(“\n1 insert 2 merge”);

printf(“\n3 symmetric 0 exit \n”);

printf(“Please select(0–3)\n”);

scanf(“%d”,select);

switch(select){

case 1:

InitList(L);

CreateList_Sorted(L);

Traverse(L,printdata);

printf(“\nInput the element of inserted\n”);

scanf(“%d”,e);

Insert(L,e);

Traverse(L,printdata);

break;

case 2:

InitList(L1);

CreateList_Sorted(L1);

Traverse(L1,printdata);

InitList(L2);

CreateList_Sorted(L2);

Traverse(L2,printdata);

InitList(L);

MergeList(L1,L2,L);

Traverse(L,printdata);

break;

case 3:

InitList(L);

CreateList(L);

Traverse(L,printdata);

if (Symmetric(L)) printf(“Yes!\n”); else printf(“Not\n”);

break;

case 0:break;

default:printf(“Error! Try again!\n”);

}

}while(select);

}

/*單向鏈表的有關操作示例*/

/*類型定義及頭文件部分,文件名為sllink.h*/

#include stdio.h

#include stdlib.h

typedef int ElemType;//元素實際類型

typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode,*LinkList; //定義結點、指針類型名

//頭插法建立無序鏈表

void CreateList(LinkList L){

LinkList p;

ElemType e;

L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

printf(“頭插法建立鏈表,以0結束\n”);

scanf(“%d”,e);

while(e){

p=(LinkList)malloc(sizeof(LNode));

p-data=e;

p-next=L-next;

L-next=p;

scanf(“%d”,e);

}

}

/*非遞減有序單向鏈表L插入元素e序列仍有序*/

void Insert_Sort(LinkList L,ElemType e){

LinkList p,s;

s=(LinkList)malloc(sizeof(LNode));

s-data=e;

p=L;

while(p-nextp-next-data=e)

p=p-next;/*查找插入位置*/

s-next=p-next; /*插入語句*p結點後插入*s結點*/

p-next=s;

}

/*建立遞增有序的單向鏈表*/

void Create_Sort(LinkList L){

ElemType e;

L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

printf(“建立有序表,輸入任意個整型數據以0結束\n”);

scanf(“%d”,e);

while(e){

Insert_Sort(L,e);

scanf(“%d”,e);

}

}

/*單向鏈表的遍歷*/

void Traverse(LinkList L){

LinkList p;

printf(“遍歷鏈表”);

for(p=L-next;p;p=p-next)

printf(“%5d”,p-data);

printf(“\n”);

}

/*在單向鏈表刪除元素e*/

void Delete(LinkList L,ElemType e){

LinkList p,q;

p=L;

q=L-next;

while(q q-data!=e){//查找元素的刪除位置

p=q;

q=q-next;

}

if(!q) printf(“\nnot deleted”);/*未找到元素e*/

else {p-next=q-next;/*找到刪除*/

free(q);}

}

/*單向鏈表的逆置*/

void exch(LinkList L){

LinkList p,s;

p=L-next;

L-next=NULL;

while(p){

s=p;

p=p-next;

s-next=L-next;

L-next=s;

}

}

/*兩個非遞減有序單向鏈表合併後仍為非遞減序列*/

void MergeIncrease(LinkList La,LinkList Lb,LinkList Lc){

LinkList p,q,s,rear;

p=La-next;

q=Lb-next;

Lc=rear=La;

free(Lb);

while(pq){

if (p-dataq-data) {s=p;p=p-next; }

else {s=q;q=q-next; }

rear-next=s;/*較小元素插入表尾*/

rear=rear-next;

}

if (p) rear-next=p; else rear-next=q;

}

/*主函數部分,文件名為sllink.c*/

//#include “sllink.h”

void main(){

LinkList La,Lb,Lc;

ElemType e;

int select;

do{

printf(” 1 建立無序表,再刪除指定元素\n”);

printf(” 2 建立遞增有序表,再逆置\n”);

printf(” 3 建立兩個遞增有序表,將它們和並為一個仍遞增表\n”);

printf(” 0 退出,請輸入選項(0-3)\n”);

scanf(“%d”,select);

switch(select){

case 0:

break;

case 1:

CreateList(La);

Traverse(La);

printf(“輸入需刪除的元素\n”);

scanf(“%d”,e);

Delete(La,e);

Traverse(La);

break;

case 2:

Create_Sort(La);

Traverse(La);

exch(La);

printf(“The list that is exchaged\n”);

Traverse(La);

break;

case 3:

Create_Sort(La);Traverse(La);

Create_Sort(Lb);Traverse(Lb);

MergeIncrease(La,Lb,Lc);Traverse(Lc);

break;

default:

printf(“輸入選項錯誤,請重新輸入!\n”);

}

}while(select);

}

這些內容不知道能不能幫助到你。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/207238.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-08 14:21
下一篇 2024-12-08 14:21

相關推薦

  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字符串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • Python磁盤操作全方位解析

    本篇文章將從多個方面對Python磁盤操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件權限修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29

發表回復

登錄後才能評論